언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

RPG 게임의 능력치 - 1) Attribute를 초기화하는 방법

monstro 2025. 7. 25. 20:51
728x90
반응형

- 개요

ATTRIBUTE_ACCESSORSInit 함수를 사용하지 않고 Attribute의 값을 초기화하는 방법을 알아본다

총 2개의 방법을 알아본다

  • Data Table 애셋을 통해 초기화
  • GameplayEffect를 통해 초기화

 

1) Data Table 애셋을 통해 초기화

1 - 1) AuraAttributeSet 클래스

 

4개의 Primary AttributeAttributeSet에 추가한다

추가한 Attribute 역시 ATTRIBUTE_ACCESSORS를 사용하여 접근과 수정이 쉽게 이뤄지도록 설정한다

 

 

추가한 Attribute들Replication하기 위한 콜백 함수를 추가한다

 

 

GetLifetimeReplicatedProps 함수에서 DOREPLIFETIME_CONDITION_NOTIFY 매크로를 사용하여

추가한 Attribute들에 대해 레플리케이션 모드를 설정합니다.

 

 

추가한 Attribute들에 대한 레플리케이션 콜백 함수들위와 같이 작성한다

 

1 - 2) 언리얼 에디터

 

AttributeMetaData를 상속받은 Data Table 애셋을 생성한다

 

 

PlayerState의 블루 프린트의 AbilitySystemComponent에서

Default Starting Data 속성에서 Attributes / Default Starting Table 설정값을 설정한다

 

1 - 3) 최종 실행 결과

 

위와 같이 Data Table 애셋에 작성한 값으로 Attribute가 초기화된 것을 확인할 수 있다

 

2) GameplayEffect를 통해 초기화

2 - 1) AuraCharacterBase 클래스

 

추가한 Attribute들을 초기화GameplayEffect프로퍼티로 새로 추가한다

추가한 GameplayEffect 캐릭터에게 적용하기 위한 함수 2개를 추가하였다

 

 

ApplyEffectToSelf 함수의 로직은 위와 같이 구성하였다

ASC로부터 GameplayEffect를 적용하기 위한 GameplayEffectContextHandle을 생성한다

생성한 Handle의 Source캐릭터 자기자신으로 설정한다

생성한 GEContext의 Handle에서 GESpec의 Handle을 생성하고 GameplayEffect자기자신에게 적용한다

 

 

InitializeDefaultAttributes 함수의 로직은 위와 같다

프로퍼티 DefaultPrimaryAttributes ApplyEffectToSelf 함수에 인자로 넘겨 Attribute를 초기화한다

 

2 - 2) AuraCharacter 클래스

 

InitAbilityActorInfo 함수의 제일 마지막에 InitializeDefaultAttributes 함수를 호출하여

플레이어 캐릭터Attribute를 초기화한다

 

2 - 3) 언리얼 에디터

 

새롭게 추가한 Attribute들을 Override 방식으로 초기화하는 GameplayEffect를 생성한다

 

 

플레이어 캐릭터의 블루 프린트에서 생성한 GameplayEffect를 설정한다

 

2 - 4) 최종 실행 결과

 

위와 같이 Attribute의 값이 문제없이 초기화되는 것을 확인할 수 있다

프로젝트에서는 Data Asset을 사용하는 방식이 아닌, Gameplay Effect를 사용하여 Attribute를 초기화한다

728x90
반응형