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

RPG 게임의 능력치 - 4) 새로운 능력치 추가와 레벨 시스템 추가

monstro 2025. 7. 27. 20:33
728x90
반응형

- 개요

Attribute Set새로운 능력치를 대거 추가하고 레벨을 추가하여

플레이어 캐릭터 몬스터 캐릭터레벨에 따라 다른 동작을 수행할 수 있도록 로직을 작성한다

 

1) 새로운 능력치 추가

1 - 1) AuraAttributeSet 클래스

 

 

AttributeSet새로운 능력치를 추가하고 추가한 Attribute별로 Replication을 위한 콜백함수를 추가한다

 

 

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

추가한 AttributeReplication 모드를 설정한다

 

 

추가한 Attribute의 Replication 콜백 함수의 로직은 위와 같다

GAMEPLAYATTRIBUTE_REPNOTIFY 매크로를 사용하여 Attribute가 변경되면 Replication한다

 

1 - 2) AuraCharacterBase 클래스

 

2개의 프로퍼티를 추가한다

  • DefaultSecondaryAttributes : 새롭게 추가한 Attribute를 초기화하는 GameplayEffect
  • DefaultVitalAttributes : Health / Mana 어트리뷰트를 초기화하는 GameplayEffect

 

 

InitializeDefaultAttributes 함수추가한 2개의 GameplayEffect 프로퍼티를 적용하는 로직을 추가한다

 

2) 레벨 시스템 추가

2 - 1) CombatInterface 클래스

 

플레이어의 레벨을 가져올 수 있는 GetPlayerLevel 함수를 생성한다

BlueprintNativeEvent 속성을 설정하여 C++에서 로직을 정의하되, 블루 프린트에서 오버라이드하도록 설정한다

 

2 - 2) AuraCharacterBase 클래스

 

상속 구조에 CombatInterface를 추가하여 자식 클래스에서 GetPlayerLevel 함수를 오버라이드하도록 설정한다

 

2 - 3) AuraPlayerState 클래스

 

 

 

PlayerState레벨을 추가하고 레벨을 Replication하기 위한 함수를 추가한다

 

 

GetLifetimeReplicatedProps 함수 DOREPLIFETIME 매크로를 사용하여 레벨Replicate하도록 설정한다

레벨Replicate되는 경우 호출하는 OnRep_Level 함수는 정의만 하고, 아직 로직을 작성하지는 않는다

 

2 - 4) AuraEnemy 클래스

 

CombatInterface로부터 상속받은 GetPlayerLevel 함수를 오버라이드한다

 

 

몬스터의 능력치를 설정하기 위한 Level 프로퍼티를 추가한다

 

 

GetPlayerLevel 함수오버라이드하여 프로퍼티 Level을 리턴하도록 설정한다

 

2 - 5) AuraCharacter 클래스

 

몬스터와 동일하게 CombatInterface의 함수를 오버라이드한다

 

 

오버라이드된 로직은 위와 같다

PlayerState를 가져오고 PlayerState로부터 GetPlayerLevel 함수를 호출한다

 

- 최종 실행 결과

 

위와 같이 새롭게 추가한 Attribute들이 설정된 것을 볼 수 있다

728x90
반응형