GameMode의 주요 이벤트 함수는 아래와 같다
// SGameMode.h
...
UCLASS()
class STUDYPROJECT_API ASGameMode : public AGameModeBase
{
...
public:
ASGameMode();
virtual void InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage) override;
virtual void InitGameState() override;
virtual void PostInitializeComponents() override;
virtual void PreLogin(const FString& Options, const FString& Address, const FUniqueNetIdRepl& UniqueId, FString& ErrorMassage) override;
virtual APlayerController* Login(UPlayer* NewPlayer, ENetRole InRemoteRole, const FString& Portal, const FString& Options, const FUniqueNetIdRepl& UniqueId, FString& ErrorMessage);
virtual void PostLogin(APlayerController* NewPlayer) override;
};
PlayerController의 주요 이벤트 함수는 아래와 같다
// SPlayerController.h
...
UCLASS()
class STUDYPROJECT_API ASPlayerController : public APlayerController
{
GENERATED_BODY()
public:
ASPlayerController();
virtual void PostInitializeComponents() override;
virtual void PlayerTick(float DeltaSeconds) override;
protected:
virtual void SetupInputComponent() override;
virtual void OnPossess(APawn* aPawn) override;
virtual void OnUnPossess() override;
virtual void BeginPlay() override;
virtual void EndPlay(EEndPlayReason::Type EndPlayReason) override;
};
PlayerPawn의 주요 이벤트 함수는 아래와 같다
// SPlayerPawn.h
...
UCLASS()
class STUDYPROJECT_API ASPlayerPawn : public APawn
{
...
public:
ASPlayerPawn();
// CDO 생성 시점
virtual void PostInitializeComponents() override;
// 개체 생성 시점
virtual void PossessedBy(AController* NewController) override;
virtual void UnPossessed() override;
virtual void Tick(float DeltaSeconds) override;
virtual void EndPlay(EEndPlayReason::Type EndPlayReason) override;
protected:
virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
virtual void BeginPlay() override;
};
위 함수들의 Flow
주의 사항 1
CDO는 .uproject파일을 더블클릭해서 언리얼 Editor가 실행되고 로딩화면이 나오면서
모든 UCLASS()매크로로 선언된 언리얼 클래스들의 CDO가 생성되고 생성자가 호출된다
패키징이 된 .exe파일을 실행할 때도 처음 실행할 때 CDO가 생성되고 생성자가 호출된다
기존 레벨에 배치된 액터는
최초로 에디터에서 레벨에 배치되어 질때 호출되고
에디터 플레이 시에도 생성자가 호출된다
반면, 런타임 중에 생성되는 액터(동적 생성된 액터)는
생성되는 시점에 생성자가 호출된다
주의 사항 2
Pawn 개체의 Auto Possess Player 속성은
해당 Pawn이 플레이어에 의해 조종될 때 자동으로 할당되는지 여부를 결정한다
Pawn 개체 클릭 > Details > Auto Possess Player 속성을 통해 설정 가능하다
- Disabled (비활성화):
해당 Pawn은 자동으로 플레이어에게 할당되지 않는다
보통 이 옵션은 AI가 해당 Pawn을 제어하는 경우에 사용된다
- Player 0 ~ Player 7:
해당 Pawn은 지정된 플레이어에 의해 자동으로 할당된다
일반적으로 단일 플레이어 또는 멀티플레이어 게임에서 사용된다
- AI (인공 지능):
해당 Pawn은 인공 지능에 의해 자동으로 조종된다
보통 AI 캐릭터나 NPC에게 할당된다
예를 들어,
싱글 플레이어 게임에서는 정해진 폰이 있기에
보통 하나의 Pawn을 플레이어에게 할당하고
나머지는 AI에게 할당하는 방식으로 사용된다
멀티플레이어 게임에서는 각 플레이어에게 각각의 Pawn을 할당하는 데 사용된다
MMORPG의 경우에는 플레이어 컨트롤러가 어떤 폰에 빙의될지 모르기 때문에
Disabled를 한다
'게임 엔진 > [코드조선] 언리얼' 카테고리의 다른 글
언리얼 Pawn - Pawn 조작 (0) | 2024.05.13 |
---|---|
언리얼 Pawn - Pawn 클래스 생성 및 내부 (0) | 2024.05.13 |
언리얼 게임 플레이 프레임워크 - 플레이어 컨트롤러와 폰 (0) | 2024.05.12 |
언리얼 게임 플레이 프레임워크 - Game Mode (0) | 2024.05.12 |
언리얼 게임 플레이 프레임워크 - 기본 구성 (0) | 2024.05.12 |