ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

GAS学习

2022-07-12 21:35:12  阅读:177  来源: 互联网

标签:AbilitySystemComponent None EGASAbilityInputID GAS 学习 static Jump 技能


GameplayAbilitySystem

GAS是Epic提供的一套技能解决方案,使用时需要在plugin启用Gameplay Abilities插件。

Ability & Input

  • 处理输入的类需要实现IAbilitySystemInterface的接口,并且创建AbilitySystemComponent
//创建AbilitySystemComponent组件 
AbilitySystemComponent = CreateDefaultSubobject(TEXT("AbilitySystemComponent")); 
//重写该方法
UAbilitySystemComponent* AGasLearningCharacter::GetAbilitySystemComponent() const { return AbilitySystemComponent; }
  • GAS依靠Key相同这一默认约定,将输入与技能ID做了绑定。
/** *key 要与项目input的设置一致,才能刚在gas里绑定 */ 
UENUM(BlueprintType) enum class EGASAbilityInputID : uint8 {
//0 None None UMETA(DisplayName = "None"),
//1 Jump Jump UMETA(DisplayName = "Jump"),
//2 Sprint Sprint UMETA(DisplalyName = "Sprint")
}; 
void Character::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
//绑定输入与释放的技能(通过枚举的key和Input的key一一对应) 
AbilitySystemComponent->BindAbilityActivationToInputComponent(
  PlayerInputComponent,
  FGameplayAbilityInputBinds(
    FString(),/**ConfirmTargetCommand*/
    FString(),/**CancelTargetCommand*/
    FString(TEXT("EGASAbilityInputID")),/**EnumName,即上面定义的枚举*/     
    static_cast(EGASAbilityInputID::None),/**ConfirmTargetInputID*/         
    static_cast(EGASAbilityInputID::None)/**CancelTargetInputID*/ ) );
} 
/*关于Confirm和Cancel: 
 技能基本走的是这样的套路: 
 技能激活 --> 选择目标 --> 确认/取消 目标 --> 释放技能效果/中断技能
**/
  • 技能ID与所释放技能的绑定
  void Character::PossessedBy(AController* NewController)
   { 
      Super::PossessedBy(NewController);
     if(GetLocalRole() != ROLE_Authority || !IsValid(AbilitySystemComponent)) {
       return /**处理多人游戏*/;
   } 
  //给与技能 
  AbilitySystemComponent->GiveAbility( 
    FGameplayAbilitySpec( 
      UGameplayAbility_CharacterJump::StaticClass(),//使用GAS自带的跳跃技能实现
      1,
      static_cast(EGASAbilityInputID::Jump),
      this)
 ); 
  //SprintAbility可以在蓝图实现 
  //UPROPERTY(BlueprintReadOnly, EditAnywhere) 
  //TSubclassOf SprintAbility; 
  if(SprintAbility) { 
    AbilitySystemComponent->GiveAbility( 
      FGameplayAbilitySpec( 
        SprintAbility,
        1, 
        static_cast(EGASAbilityInputID::Sprint),
        this )
   );
 } 
/*关于蓝图实现技能:
   创建GameplayAbility的子蓝图,实现EventActivateAbility
**/
} 

AbilitySet & GameplayEffect

标签:AbilitySystemComponent,None,EGASAbilityInputID,GAS,学习,static,Jump,技能
来源: https://www.cnblogs.com/pixs-union/p/16471860.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有