[程式] GameplayAbilities Sytem介绍 (一)

楼主: yekdniw (yekdniw)   2018-08-31 22:29:04
网页版
https://yekdniwunrealengine.blogspot.com/2018/08/gameplayabilities-sytem.html
Gameplay Abilities System(GAS)是UE4内建但是默认没开启的一个plugin,
并且有在Epic Games自己出的Paragon以及Fornite两款游戏使用。
因为两款游戏都是网络对战类型的游戏,所以GAS的设计是有考虑低网络传输
以及网络预测的。GAS也开出了许多blueprint(bp)编辑的接口,
让设计可以在bp层完成所有的技能开发。因为系统设计非常活的关系,
使用GAS几乎可以达到各种设计的需求,并且许多常用的功能都已经内建
在GAS里面。
使用已完成的GAS系统其实不难,技能定义好,技能的效果定义好,很快就可以完成一个
技能。在大量制作上会非常快速。
但是理解GAS以及要扩充GAS功能的难度就很高了,由于GAS可塑性非常好,要完成一件事
可以用很多种方法达成,但是只有少部分方法是效率最好,网络传输最少的,要找到这一
条方法就需要大量的时间研究才办的到。
如果想更深入了解Gameplay Abilities System,在官方4.20发表的时候也一并公布了
ActionRPG的专案范例,可以去Unreal Launcher下载来研究。
为什么要用GAS系统,以下有几点原因可供参考:
1. Unreal原生支援并有两款已上市游戏使用
2. 内存、效率、网络传输都是官方有调整过
3. 支援Client预测与后续相关要处理的事情
4. 可塑性高,大部分的设计都可以用内建的功能做到
很不错的英文介绍投影片:[连结]
https://github.com/michaeltchapman/MCGameplayAbilities/blob/master/Gameplay_Abilities.pdf
技术需求
在目前的UE4版本,GAS是没办法运作在纯bp专案的,所以在继续往下看之前,要先具备
C++的基本知识,电脑环境也要安装Visual Studio才能正确启用GAS。或是直接从
ActionRPG开始,用基本已建立好的角色型态做实验。
GameplayAbilitySystem设定
在Unreal的plugin上启用 Edit->Plugins->Built-In->Gameplay
勾选Enabled。重开Unreal。
打开Visual studio专案,打开[专案名称].Build.cs, 新增以下程式码:
PublicDependencyModuleNames.AddRange(new string[] { "GameplayAbilities" });
为了让你的角色可以发动技能,在你的角色 MyCharacter.h新增以下程式码:
UPROPERTY(BlueprintReadOnly)
UAbilitySystemComponent* AbilitySystemComponent = nullptr;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Abilities)
TArray<TSubclassOf<UGameplayAbility>> GameplayAbilities;
/** Apply the startup gameplay abilities and effects */
void AddStartupGameplayAbilities();
virtual void PossessedBy(AController* NewController) override;
.cpp新增以下程式码:
AMyCharacter::AMyCharacter()
{
AbilitySystemComponent =
CreateDefaultSubobject<UAbilitySystemComponent>
(TEXT("AbilitySystemComponent"));
AbilitySystemComponent->SetIsReplicated(true);
}
void AMyCharacter::AddStartupGameplayAbilities()
{
// Grant abilities, but only on the server
for (TSubclassOf<UGameplayAbility>& StartupAbility : GameplayAbilities)
{
AbilitySystemComponent->GiveAbility(
FGameplayAbilitySpec(StartupAbility, 1, INDEX_NONE, this));
}
}
void AMyCharacter::PossessedBy(AController* NewController)
{
Super::PossessedBy(NewController);
AbilitySystemComponent->RefreshAbilityActorInfo();
AddStartupGameplayAbilities();
}
以上程式码是我个人研究出比较少的步骤就能让角色能启动ability的方法,实际上程式
码可能要再更复杂。
作者: laikyo (六元)   2018-08-31 23:34:00
感谢提供资讯
作者: coolrobin (泳圈)   2018-09-01 10:42:00
推推推
作者: rapidsheep (rapidsheep)   2018-09-01 15:54:00
感谢分享,client端预测真的是连线游戏挺重要的设计
作者: oikl1268 (迷路)   2018-09-01 16:56:00
感谢分享!
作者: rickkcir (多果汁)   2018-09-07 11:47:00
终于有人分享!
作者: elfkiller (没有暱称)   2018-09-09 17:19:00
推推

Links booklink

Contact Us: admin [ a t ] ucptt.com