PlayerState
PlayerState
플레이어마다의 고유한 정보를 관리하는 기능을 제공
멀티플레이 모드에서 핵심적인 기능이라고 한다. 싱글플레이에서는 사용할 필요가 없다고 하니, 추후에 멀티플레이를 구현할 때 자세히 알아볼 예정이다.
GameState
GameState
게임내의 전역 정보를 저장하는 기능을 제공
게임 점수, 웨이브 지속 시간 등 게임 내의 핵심이 되는 요인들을 관리하기에 유용한 클래스이다.
GameState, GameStateBase 2가지 종류가 있는데, 싱글플레이 모드에서는 단순한 GameStateBase를 선호한다고 한다.
//.h
public:
ASpartaGameStateBase();
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Score")
int32 Score;
UFUNCTION(BlueprintPure, Category = "Score")
int32 GetScore() const;
UFUNCTION(BlueprintCallable, Category = "Score")
void AddScore(int32 Amount);
// .cpp
ASpartaGameStateBase::ASpartaGameStateBase()
{
Score = 0;
}
int32 ASpartaGameStateBase::GetScore() const
{
return Score;
}
void ASpartaGameStateBase::AddScore(int32 Amount)
{
Score += Amount;
UE_LOG(LogTemp, Warning, TEXT("Score Increased ! : %d"), Score);
}
GameStateBase 클래스를 구현한 후, 호출할 때에는 GameStateBase 헤더파일을 포함해서 World의 게임스테이트를 캐스팅해주면 된다.
UWorld* World = GetWorld();
ASpartaGameStateBase* GameState = World->GetGameState<ASpartaGameStateBase>();
GameState->AddScore(PointValue);
ApplyDamage - TakeDamage
특정 객체에게 데미지를 줄 때 유용하게 활용할 수 있는 함수이다.
virtual float TakeDamage(
float DamageAmount,
struct FDamageEvent const& DamageEvent,
class AController* EventInstigator,
AActor* DamageCauser) override;
UGameplayStatics::ApplyDamage(
Actor,
ExplosionDamage,
nullptr,
this,
UDamageType::StaticClass())
TakeDamage는 헤더파일에 virtual로 선언하는 느낌이고, ApplyDamage는 cpp파일에서 전역으로 호출해서 사용하는 느낌이다.
특정 객체에게 ApplyDamage를 호출하면, 해당 객체에서 TakeDamage를 찾아 호출해주는 것으로 보인다.
아주 유용한 기능이라 언리얼 공식문서를 찾아서 정리할 필요가 있을 것 같다.
느낀 점
코딩을 독학했다면, 이런 ApplyDamage, TakeDamage를 알아내는데에 한참 시간이 걸렸을 것 같아요. 역시 정답이나 노하우를 알고 배워가는게 학습속도에 굉장한 가속을 주는 것 같습니다 ! 오늘 배운 GameState, PlayerState, ApplyDamage, TakeDamage는 두고두고 쓸 것 같아서 따로 정리를 해야할 것 같네요 !
'언리얼 엔진 > 스파르타코딩클럽' 카테고리의 다른 글
[언리얼엔진] 4-1. UI 위젯 설계와 실시간 데이터 연동 (0) | 2025.02.10 |
---|---|
[언리얼엔진] 3-5. 게임 루프 설계 (0) | 2025.02.07 |
[언리얼엔진] 3-3. 아이템 스폰 및 데이터테이블 관리 (1) | 2025.02.05 |
[언리얼엔진] 3-2. 충돌 이벤트로 획득하는 아이템 구현 (0) | 2025.02.04 |
[언리얼엔진] 3-1. 캐릭터 구현 (1) | 2025.01.27 |