Unreal GAS (16) - Attribute Setup - DataTable / GameplayEffect

wnsduf0000·2025년 12월 1일

Unreal_GAS

목록 보기
17/34
  • Attribute From DataTable
    • DataTable을 통해 Attribute를 초기화 하는 방법
    • FAttributeMetaData 구조체를 통해 생성한 DataTable을 세팅한다.
      각 Row의 이름들은 (AttributeSet의 이름).(Attribute의 이름) 의 형태를 따라야 한다.
      예를 들어, AuraAttributeSet의 Health인 경우, Row 이름을 AuraAttributeSet.Health로 한다.
      - 당연한 얘기지만 DataTable로 값을 초기화하려는 AttributeSet에 존재하는 Attribute들과 이름이 완벽히 일치해야 한다.
    • AbilitySystemComponent의 디테일 패널에서 AttributeTest 항목을 찾아 AttributeSet와 함께 FAttributeMetaData로 생성한 DataTable을 세팅해준다.
      • 디테일 패널의 항목 이름이 왜 AttributeSet이 아니라 Attribute Test인가? 했는데
        아직 개발 중인 기능이라는 내용이 코드 주석으로 표기되어 있어서 그런듯 하다.

        
        USTRUCT(BlueprintType)
        struct GAMEPLAYABILITIES_API FAttributeMetaData : public FTableRowBase
        {
        	GENERATED_USTRUCT_BODY()
        
        public:
        
        	FAttributeMetaData();
        
        	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Gameplay Attribute")
        	float		BaseValue;
        
        	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Gameplay Attribute")
        	float		MinValue;
        
        	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Gameplay Attribute")
        	float		MaxValue;
        
        	UPROPERTY()
        	FString		DerivedAttributeInfo;
        
        	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Gameplay Attribute")
        	bool		bCanStack;
        };
  • Attribute From GameplayEffects
    • GameplayEffect를 통해 Attribute를 초기화 하는 방법

    • 캐릭터 클래스에 GameplayEffect 변수를 생성하고,
      캐릭터 초기화 관련 함수에서 GameplayEffect를 적용해주면 된다.

      ```c++
      // AuraCharacterBase.h
      UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "Attributes")
      TSubclassOf<UGameplayEffect> DefaultPrimaryAttributes;
      
      void InitializePrimaryAttributes() const;
      
      // AuraCharacterBase.cpp
      void AAuraCharacterBase::InitializePrimaryAttributes() const
      {
      	check(GetAbilitySystemComponent());
      	check(DefaultPrimaryAttributes);
      
      	FGameplayEffectContextHandle EffectContext = GetAbilitySystemComponent()->MakeEffectContext();
      	FGameplayEffectSpecHandle SpecHandle = GetAbilitySystemComponent()->MakeOutgoingSpec(DefaultPrimaryAttributes, 1, EffectContext);
      	
      	if (SpecHandle.IsValid())
      	{
      		AbilitySystemComponent->ApplyGameplayEffectSpecToTarget(*SpecHandle.Data.Get(), GetAbilitySystemComponent());
      	}
      }
      ```
    • 사용할 GameplayEffect는 에디터에서 생성해주면 되는데,
      이 때 초기화 할 Attribute에 맞게 Modifier를 적절히 세팅해주면 된다.
      Modifier 옵션은 Add가 아니라 Override로 하는 것이 편리하다.

profile
저는 게임 개발자로 일하고 싶어요

0개의 댓글