BLOGブログ

2026.08.19UE5

[UE5] AI にもプレイヤーと同じ PlayerState を持たせてみよう!

執筆バージョン: Unreal Engine 5.8

NPCがプレイヤーたちと同じ立場でバトルに参加するようなゲームでは、 NPCについても「合計与ダメージ」や「『Character が死ぬ → その後復活』しても維持されるスキルポイント」のような いわゆる「ゲーム参加者」が持つ情報を、プレイヤーと同じように扱いたい場合があります。 このような情報は PlayerState に載せると便利ですが、PlayerState は AI の場合、デフォルトでは生成されません。

 

「デフォルトでは」

 

そうです、実は AI でも、プレイヤーと同様に PlayerState を持たせる方法が用意されています。 それが、AIController の Wants Player State プロパティです。 Class Defaults にてチェックを入れると、AIController 生成時に WorldSettings の PlayerStateClass に指定されている PlayerState を生成し保持するようになります。

 

それでは、試してみましょう! まずは、PlayerState を継承した BP_MyPlayerState クラスを追加し、ブループリントエディタを開きます。 今回はサンプルとして、OwnerName と RandomScore というプロパティを作成し、 それぞれ Owner の名前と、ランダムな値をセットするイベントを作成します。 PlayerState の Owner は、PlayerController もしくは AIController になるので、 このイベントを実行すると、OwnerName には、いずれかの Controller の DisplayName がセットされるはずです。

 

次に、BP_PlayerState を使うための設定をしていきましょう。 まずは BP_PlayerState を WorldSettings の Player State Class にセットします。 これで、現時点では PlayerController が BP_PlayerState を持つようになります。

 

さらに BP_PlayerState を持たせたい AIController クラスの Wants Player State プロパティにチェックを入れましょう。 これで、AIController についても BP_PlayerState を持つようになりました。

 

生成された PlayerState は、GameState の GetPlayerArray ノードで、全プレイヤー分取得することが可能です。 Wants Player State を有効にした AI の PlayerState もこちらに格納されています。 サンプルとして、レベルブループリントの BeginPlay に以下のようなノードを作ってみましょう。 それでは、PIE実行してみましょう。 なお、今回実行するレベルには、NPC キャラクタを4体配置してあります。 Owner が AIController の PlayerState が4つ生成されていますね! これで、Player も AI も同じ PlayerState で情報を管理できるようになりました!