UE5でのGameModeやプレイヤーキャラクター等の設定と取得

UE のレベルでは、GameMode、GameState、プレイヤー キャラクター (DefaultPawn)、PlayerController、PlayerState などがすべて必須のコンポーネントです。これらの各ユニットの機能は次のとおりです。

  1. GameMode はレベル全体のコントローラーであり、レベル全体のビジネス ロジックを記述するために使用されます。
  2. GameState はレベル全体の状態であり、レベル全体のゲーム データを保存するために使用されます。
  3. DefaultPawn はプレイヤー キャラクターであり、ロールプレイング ゲームの場合はゲーム シーンに表示されるキャラクター エンティティです。
  4. PlayerController はプレーヤーのコントローラーであり、プレーヤーに関連する制御ロジックを記述するために使用されます。
  5. PlayerState はプレーヤーの状態であり、プレーヤーに関連するステータス データを保存するために使用されます。

以下ではGameModeとDefaultPawnを例に、これらのコンポーネントユニットの設定と取得について紹介します。

1. GameModeの設定と取得

1.1 ゲームモード設定

C++ またはブループリントで AGameModeBase から継承したクラスを作成した後、WorldSettings インターフェイスでカスタマイズした GameMode を選択することで、特定のレベルの GameMode の設定が完了します。

図 1、GameMode 設定

1.2 GameModeの取得

特定のレベルに属する GameMode は、UGameplayStatics::GetGameMode() を通じて取得できます。使用例は次のとおりです (ACylindricalWall がアクター)。まず GetGameMode() を通じて AGameModeBase を取得し、それをカスタマイズした AGodGameMode に変換します。

void ACylindricalWall::MonitorPlayer()
{
    // 获取GameMode
    auto GameMode = Cast<AGodGameMode>(UGameplayStatics::GetGameMode(this));
   // ...
}

GetGameMode()のソースコード実装は以下の通りで、まずWorldを取得し、次にWorldからGameModeを取得します。

AGameModeBase* UGameplayStatics::GetGameMode(const UObject* WorldContextObject)
{
    UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
    return World ? World->GetAuthGameMode() : NULL;
}

2. プレイヤーキャラクターの設定と取得

2.1 プレイヤーキャラクターの設定

2.1.1 WorldSettings インターフェースでプレイヤーキャラクターを設定する

以下の図に示すように、プレイヤー キャラクターの DefaultPawn の設定も GameMode と同様に WorldSettings インターフェイス上で完了できます。ただし、WorldSettings インターフェイスで設定するこの方法は、選択した GameMode がブループリント クラスの場合にのみ適用されます。GameMode が C++ クラスの場合、DefaultPawnClass のドロップダウン ボックスの操作は無効になります。

図 2、DefaultPawn の設定

2.1.2 GameModeでのプレイヤーキャラクターの設定

WorldSettings インターフェイスで選択した GameMode クラスが C++ クラスで、WorldSettings インターフェイスで DefaultPawnClass を選択できないという問題を解決するために、GameMode クラスでプレイヤー キャラクターを設定できます。設定方法は以下の通り、GameModeのコンストラクター内でDefaultPawnClassに直接値を代入することでプレイヤーキャラクターの設定が完了します。また、PlayerControllerClassに値を代入することで、プレイヤーコントローラーを直接設定することもできます。

AGodGameMode::AGodGameMode()
{
    // set default pawn class to our Blueprinted character
    static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/ThirdPerson/Blueprints/BP_ThirdPersonCharacter"));
    if (PlayerPawnBPClass.Class != NULL)
    {
        // 设置玩家角色
        DefaultPawnClass = PlayerPawnBPClass.Class;
        PlayerControllerClass = AGodPlayerController::StaticClass();
    }
}

2.1 プレイヤーキャラクターの入手

特定のレベルに属するプレイヤー キャラクターは、UGameplayStatics::GetPlayerPawn() を通じて取得できます。その使用例は次のとおりで、ACylindricalWall が Actor である場合、まず GetPlayerPawn() を通じて APawn を取得し、それをカスタム AGodCharacter に変換します。

void ACylindricalWall::MonitorPlayer()
{
    // 获取玩家角色
    auto Player = Cast<AGodCharacter>(UGameplayStatics::GetPlayerPawn(GetWorld(), 0));
   // ...
}

GetPlayerPawn()のソースコード実装は以下の通りで、まずPlayerControllerを取得し、次にPlayerControllerがPawnを取得します。

APawn* UGameplayStatics::GetPlayerPawn(const UObject* WorldContextObject, int32 PlayerIndex)
{
    APlayerController* PC = GetPlayerController(WorldContextObject, PlayerIndex);
    return PC ? PC->GetPawnOrSpectator() : nullptr;
}

プレイヤーキャラクターがCharacterの場合は、GetPlayerPawn()の代わりにGetPlayerCharacter()を使用することもできます。

おすすめ

転載: blog.csdn.net/ttod/article/details/133495952