网站开发难学吗,红包网站开发,做宽屏网站,唐山seo排名优化前面几篇文章#xff0c;总算把GE给更新完了#xff0c;GE的基础应用也算讲清楚了。接下来#xff0c;我们将更新GA的相应的课程了#xff0c;首先#xff0c;这一篇先对GA做一个简单的介绍#xff0c;然后实现一下如何实现给角色应用一个GA。
简介
GamplayAbility 简称…前面几篇文章总算把GE给更新完了GE的基础应用也算讲清楚了。接下来我们将更新GA的相应的课程了首先这一篇先对GA做一个简单的介绍然后实现一下如何实现给角色应用一个GA。
简介
GamplayAbility 简称 GA是UE引擎里的GAS内的功能组件它的主要功能包括技能冷却时间CD和技能消耗的管理同时也支持网络同步和实例支持。开发者可以在ActivateAbility事件中编写相关的技能逻辑如角色动作、粒子效果以及角色数值的变动。根据技能是否施展成功可以调用CommitAbility()或EndAbility()来结束技能。
GameplayAbility在UE中的类名为UGameplayAbility它继承于UObject和IGameplayTaskOwnerInterface。UObject是所有UE对象的基类而IGameplayTaskOwnerInterface是一个抽象类代表玩法任务所有者接口。UGameplayAbility通过其丰富的继承关系和函数使得开发者能够灵活地创建和管理游戏中的技能系统。
GA类主要定义攻击或者能力它必须首先被应用给ASC我们将在服务器上执行此操作然后将 GA的spec复制到本地。在使用时必须将其激活Activated如果只应用不激活将不起效果它可以异步运行就是可以同时触发多个技能正常技能它是不能够异步的我们需要使用Ability Task去实现技能异步。
创建GA
GA的配置修改是需要在蓝图中进行的我们可以直接通过创建蓝图选择GameplayAbility去创建
但是考虑到后续要为GA增加新的功能我们先通过GameplayAbility创建一个c类然后将其命名为GameplayAbilityBase当做技能的基类用于以后的扩展。 打开代码我们首先找到ASC的基类在基类增加一个函数用于应用技能参数传入一个技能类的数组
void AddCharacterAbilities(const TArrayTSubclassOfUGameplayAbility StartupAbilities);在函数实现这里遍历传入的数组通过参数实例一个spec并应用这里为了方便测试使用GiveAbilityAndActivateOnce函数应用并直接激活。
void UAbilitySystemComponentBase::AddCharacterAbilities(const TArrayTSubclassOfUGameplayAbility StartupAbilities)
{for(TSubclassOfUGameplayAbility AbilityClass : StartupAbilities){FGameplayAbilitySpec AbilitySpec FGameplayAbilitySpec(AbilityClass, 1);//GiveAbility(AbilitySpec); //只应用不激活GiveAbilityAndActivateOnce(AbilitySpec); //应用技能并激活一次}
}找到角色的基础类CharacterBase添加一个私有属性作为角色初始的技能设置。
private:UPROPERTY(EditAnywhere, CategoryAttributes)TArrayTSubclassOfUGameplayAbility StartupAbilities; //角色初始技能设置在函数实现这里将ASC类型转换为我们创建的ASC基类并调用上面添加技能的函数
void ACharacterBase::AddCharacterAbilities() const
{UAbilitySystemComponentBase* ASC CastCheckedUAbilitySystemComponentBase(GetAbilitySystemComponent());if(!HasAuthority()) return; //查询是否拥有网络权限应用技能需要添加给服务器ASC-AddCharacterAbilities(StartupAbilities);
}这里技能的设置技能的应用函数就已经实现完毕我们现在只需要在初始化角色的时候调用角色基类身上的AddCharacterAbilities函数即可实现技能的应用。 在英雄角色类里面服务器端初始化函数为PossessedBy我们在内部初始化ASC后调用初始化技能即可。
void AHeroCharacter::PossessedBy(AController* NewController)
{Super::PossessedBy(NewController);//初始化ASC的OwnerActor和AvatarActorInitAbilityActorInfo();//设置OwnerActor的ControllerSetOwner(NewController);//初始化角色技能AddCharacterAbilities();
}测试
功能实现了接下来我们要实现对功能的测试首先打开UE创建一个技能蓝图基于我们之前创建的技能类 内部默认有两个函数回调一个是技能被激活后的回调我们可以在后面计算消耗播放动画以及做一些逻辑性的处理 另一个回调事件是技能结束回调可以在技能结束时需要编辑一些逻辑处理 技能的结束需要我们手动去处理在内部调用是用commitAbility节点计算技能消耗是否达标不达标自动结束技能EndAbility节点结束技能或者在外部取消技能 一下是我们实现的一个技能测试蓝图延迟一秒结束技能看是否正常打印 打开英雄角色蓝图发现自定义属性这里多了一项设置技能的数组参数将我们创建的技能蓝图设置上去 接着运行看是否正常打印如果正常打印那证明技能使用测试通过。