1. 기획부서에서 아래와같이 최대체력 요청이 왔다고 가정
2. 실습
- 플레이어 : PS내의 레벨을 가짐
- 적 : 변수로 레벨을 가짐
in PS
private:
UPROPERTY(VisibleAnywhere)
int32 Level=1;
* 고려사항 : 복제O, 복제될때마다 방송해야됨 -> getlifetimereplicated 재정의해야함, 복제함수 생성해야함
UPROPERTY(VisibleAnywhere, ReplicatedUsing=OnRep_Level)
int32 Level=1;
UFUNCTION()
void OnRep_Level(int32 OldLevel);
void AAuraPlayerState::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(AAuraPlayerState,Level);
}
3. 적한테도 레벨달아줌
복제안하는이유 : AI가 제어하는 적의 서버레벨을 확인하면됨?
UPROPERTY(EditAnywhere, BlueprintReadOnly,Category="Characer Class Defaults")
int32 Level=1;
4. 레벨 Getter용 Interface 생성
virtual int32 GetLevel(); //=0 아님 -> 구현강제x
int32 ICombatInterface::GetLevel()
{
return 0; //구현안한경우, 0리턴
}
5. 캐릭베이스에서 interface 구현한다고 명시 => 적, 아우라캐릭터에서 구현
class AURA_API AAuraCharacterBase : public ACharacter, public IAbilitySystemInterface, public ICombatInterface
{
- 적의경우 멤버변수 그대로 리턴하면됨
int32 AAuraEnemy::GetLevel()
{
return Level;
}
-플레이어의 경우 레벨은 PS 안에있음 (PS를 get하고, 레벨을 get하면됨)
-PS에 Getter 만들어야함 (Level이 private 이므로)
FORCEINLINE int32 GetPlayerLevel() const { return Level; }
int32 AAuraCharacter::GetPlayerLevel()
{
AAuraPlayerState* AuraPlayerState = GetPlayerState<AAuraPlayerState>();
check(AuraPlayerState);
return AuraPlayerState->GetPlayerLevel();
}
'UE5 > RPG Attributes' 카테고리의 다른 글
[UE5] RPG 속성 퀴즈 (0) | 2024.06.07 |
---|---|
[UE5] 커스텀 속성계산2, null 객체생성방법, mmc클래스 (0) | 2024.06.07 |
[UE5] 보조속성구현, 주요속성변경시 자동변경 (0) | 2024.06.07 |
[UE5] 속성 정의, 보조속성 추가하기 (0) | 2024.06.07 |
[UE5] 수정자 Coefficient, pre ,post 이해 (0) | 2024.06.07 |