▶️ PlayerState
- 언리얼에서 플레이어 각자의 정보를 저장하고 관리하는 클래스
- 해당 클래스는 서버에도 존재하고 각각 클라이언트에도 존재.
- 서버의 PlayerState를 통해 각 클라이언트와 동기화함.
- 멤버변수
- int32 PlayerId : 플레이어 고유 id. 게임내에서 구분 (클라내인가?)
- FUniqueNetIdRepl UniqueId : 플레이어 유니크 아이디 (구조체형). guid? 네트워크에서 구분.
- 함수
- PlayerId, UniqueId 두개가 서버에서 지정(변경)할 경우, 아래 두개의 함수가 호출됨.
1) OnRep_PlayerId()
virtual void OnRep_PlayerId() override;
- PlayerId가 서버에서 변경될 경우 클라이언트에서 해당 함수 호출됨.
- 서버에 있는 PlayerState는 호출 안됨
- PlayerID는 런타임에 바뀔 가능성이 조오오오오금 있다고 함
2) OnRep_UniqueId()
virtual void OnRep_UniqueId() override;
- UniqueId 서버에서 변경될 경우 클라이언트에서 해당 함수 호출됨.
- 서버에 있는 PlayerState는 호출 안됨
- 유니크 아이디는 사실 런타임에 바뀔 가능성이 없다고함
1. PlayerState 만들기
1) PlayerState 상속, GameMode폴더, PlayerStateMain 클래스 추가 및 구현
header
#include "EngineMinimal.h"
#include "GameFramework/PlayerState.h"
#include "PlayerStateMain.generated.h"
/**
*
*/
UCLASS()
class RESTART0501_API APlayerStateMain : public APlayerState
{
GENERATED_BODY()
public :
APlayerStateMain();
virtual void BeginPlay() override ;
virtual void OnRep_PlayerId() override;
virtual void OnRep_UniqueId() override;
};
cpp
APlayerStateMain::APlayerStateMain()
{}
void APlayerStateMain::BeginPlay()
{
Super::BeginPlay();
}
void APlayerStateMain::OnRep_PlayerId()
{
Super::OnRep_PlayerId();
}
void APlayerStateMain::OnRep_UniqueId()
{
Super::OnRep_UniqueId();
}
▶️ PlayerController
- 언리얼에서 플레이어를 조종하기 위한 객체
- 서버가 있을 경우, 서버와 클라이언트 모두 생긴다.
2. 플레이어 컨트롤러를 생성해보자
1) PlayerController 상속, Controller 폴더, PlayerConrollerMain 클래스 생성
header
#include "EngineMinimal.h"
#include "GameFramework/PlayerController.h"
#include "PlayerControllerMain.generated.h"
/**
*
*/
UCLASS()
class RESTART0501_API APlayerControllerMain : public APlayerController
{
GENERATED_BODY()
public :
APlayerControllerMain();
virtual void BeginPlay() override ;
};
cpp
APlayerControllerMain::APlayerControllerMain()
{}
void APlayerControllerMain::BeginPlay()
{
Super::BeginPlay();
}
3. GameStateBase상속, GameMode폴더안에 GameStateMain 클래스 생성
헤더
#include "EngineMinimal.h"
#include "GameFramework/GameStateBase.h"
#include "GameStateMain.generated.h"
/**
*
*/
UCLASS()
class RESTART0501_API AGameStateMain : public AGameStateBase
{
GENERATED_BODY()
public :
AGameStateMain();
virtual void BeginPlay() override;
};
cpp
AGameStateMain::AGameStateMain()
{}
void AGameStateMain::BeginPlay()
{
Super::BeginPlay();
}
4. 지금까지 만든 월드세팅 관련 객체 블루프린트로 생성 및 게임 모드에 설정
1) 블프/GameMode폴더에 블루프린트 클래스 생성
(1) PlayerControllerMain 상속받은 BP_PlayerControllerMain
(2) PlayerStateMain 상속받은 BP_PlayerStateMain
(3) GameStateMain 상속받은 BP_GameStateMain
2) BP_GameModeMain에 설정해주기
5. 정리
지금까지 언리얼 월드셋팅 관련 클래스를 코드로 생성
- 서버에만 고유하게 생기는건 GameMode
월드셋팅은 싱글플레이면 큰 의미를 가지진 않는다.
▶️ 코드 파일 지우는 방법
방법 1) 언리얼 에디터, 비주얼스튜디오 끄고
해당 코드파일 지우기 -> 형상관리에 올라가는 파일들 제외하고 지우기 -> 다시 솔루션 파일 만들기 -> 다시 에디터 실행
<- 이미지는 지울애들
방법 2) 에디터 종료 -> 솔루션에서 파일 제거 -> 탐색기에서 파일 제거 -> 솔루션 - 다시빌드 -> 완료되면 에디터 실행
▶️CoreMinimal보다 EnginMinimal.h 에 기능이 더 많이 들어있음
EnginMinimal.h에는 헤더가 들어있음
'Unreal Engine5 > KDT 2024' 카테고리의 다른 글
[UE5 KDT2024] 15. RPC (0) | 2025.02.27 |
---|---|
[UE5 KDT2024] 14. 애니메이션 블랜드 스페이스 (0) | 2025.02.26 |
[UE5 KDT2024] 12. GameMode (0) | 2025.02.24 |
[UE5 KDT2024] 11. 언리얼 모듈과 UPROPERTY (0) | 2025.02.23 |
[UE5 KDT2024] 10. Animation 3 (0) | 2025.02.22 |
댓글