1일1알

Attribute 본문

언리얼/Gameplay Ability System

Attribute

영춘권의달인 2024. 7. 2. 12:40

Attribute

  •  어트리뷰트는 구조체 FGameplayAttributeData 에 정의된 float값이다. 오브젝트의 체력, 공격력 등 수치에 관련된 값들을 나타낼 수 있고, 일반적으로 GE로 수정한다. Attribute Set(어트리뷰트 셋)은 어트리뷰트들에 대한 정보들을 정의하고 관리한다.

Attribute Set

  • 단일 어트리뷰트 데이터인 GameplayAttributeData의 묶음
  • 어트리뷰트는 AttributeSet이라는 클래스를 상속받아서 구현한다.
  • GameplayAttributeData는 하나의 값이 아닌 두 가지 값으로 구성되어 있음
    • BaseValue : 기본값, 영구적으로 적용되는 고정 스탯 값을 관리하는데 사용
    • CurrentValue : 변동값, 버프 등으로 임시적으로 변동된 값을 관리하는데 사용
  • Attribute Set의 주요 함수
    • PreAttributeChange : 어트리뷰트 변경 전에 호출, 변경될 값을 참조값으로 넘겨줘서 변경 사항을 적용할지 말지 결정할 수 있다.
    • PostAttributeChange : 어트리뷰트 변경 후에 호출, 변경되기 전의 값과 변경 후의 값을 넘겨줘서 변화를 인지할 수 있다.
    • PreGameplayEffectExecute : 게임플레이 이펙트(GE) 적용 전에 호출
    • PostGameplayEffectExecute : 게임플레이 이펙트(GE) 적용 후에 호출
  • 많이 수행되는 Get, Set같은 함수에 대해 매크로를 만들어서 제공
    • ATTRIBUTE_ACCESSORS(ClassName, PropertyName) : GetProperty, GetValue, SetValue, Init함수들을 한줄로 선언하는 매크로
    • GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) : 어트리뷰트 세트라던지 어떤 어트리뷰트를 나타내는 클래스에 등록된 프로퍼티를 가져오는 매크로
    • GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) : 어트리뷰트의 CurrentValue값을 가져오는 매크로
    • GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) : 어트리뷰트의 BaseValue를 변경하는 매크로
    • GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName) : BaseValue와 CurrentValue를 같은 값으로 설정하는 매크로
  • ASC는 초기화될 때 OwnerActor에 있는 UAttributeSet 타입 객체를 찾아서 자동으로 등록한다.

ASC를 얻어와서 ASC->GetSet<Attribute Set Class Name>()을 통해 어트리뷰트셋을 const로 가져올 수 있음

어트리뷰트셋은 설계상 GameplayEffect를 통해 변경해야 하기 때문에 const인 것 같음

메타(Meta) 어트리뷰트

  • 어트리뷰트의 설정을 위해 사전에 미리 설정하는 임시 어트리뷰트
  • 예) 체력을 바로 깎지 않고, 데미지를 통해 체력을 감소하도록 설정
    • 체력은 일반 어트리뷰트, 데미지는 메타 어트리뷰트
  • 데미지를 사용하는 경우 기획 추가에 유연한 대처가 가능
    • 무적기능(데미지를 0으로 처리)
    • 실드 기능(실드 값을 토대로 실드 값만큼 데미지 처리)
    • 콤보 공격시 추가 데미지 보정
  • 메타 어트리뷰트는 적용 후 바로 0으로 초기화
  • 메타 어트리뷰트는 리플리케이션에서 제외시키는 것이 일반적

UserWidget에 특정 어트리뷰트를 바인딩하여 편리하게 UI가 변경되도록 설정할 수 있다.

ASC->GetGameplayAttributeValueChangeDelegate(ClassName::GetAttribute).AddUobject(호출될 함수)

'언리얼 > Gameplay Ability System' 카테고리의 다른 글

Gameplay Effect  (0) 2024.07.02
Ability Task (AT)  (0) 2024.06.17
Gameplay Tags  (0) 2024.06.16
Gameplay Abilities (GA)  (0) 2024.06.16
Ability System Component (ASC)  (0) 2024.06.16