10.

UE5のPawnとは|Possessの仕組みとCharacter・Actorとの違い

編集

Unreal Engine 5(UE5)のPawn(ポーン)は、コントローラーに憑依(Possess)されることで操作できるようになるActorの基底クラスです。プレイヤーが操作するキャラクター、AIが動かす敵やNPC、乗り物やドローンなど「誰か(PlayerControllerまたはAIController)に操作される存在」は、すべてこのPawnを継承して作られます。逆に言えば、PawnはコントローラーにPossessされて初めて入力を受け取れるクラスであり、ここがPawnを理解するうえで最も重要なポイントです。

この記事の要点
  • Pawnは、コントローラーにPossess(憑依)されて操作可能になるActorの基底クラス。継承関係はObject → Actor → Pawn → Character
  • 操作の主体はController。プレイヤー操作ならPlayerController、AI操作ならAIControllerがPawnをPossessする。
  • CharacterはPawnの子クラスで、カプセルコンポーネント・CharacterMovementComponent・スケルタルメッシュを最初から備えた「二足歩行向けの特化版」。
  • 歩行キャラを作るならCharacter、乗り物・空中ドローン・球体など非歩行の独自挙動ならPawnを直接継承するのが定石。
  • 入力はSetupPlayerInputComponentで受け取る。Possessされていないと入力が届かないのが典型的なつまずきポイント。

Pawnとは何か

Pawnは、UE5のゲームプレイフレームワークにおいて「コントローラーが操作する対象」を表すActorです。Actorがレベルに配置できる物体すべての基底クラスであるのに対し、Pawnは「操作されること」を前提に設計されたActorという位置づけになります。

具体的には、Pawnは次のような要素を標準で備えています。

  • Possessの受け口:PlayerControllerまたはAIControllerに憑依(Possess)され、その操作を受け付ける。
  • 入力のバインド先SetupPlayerInputComponent関数で、キーボード・マウス・ゲームパッドの入力を移動やアクションへ結び付けられる。
  • 所有者(Owner)の概念:自分を操作しているControllerをGetControllerで取得でき、プレイヤー由来かAI由来かを区別できる。

一方でPawn自体は、移動ロジックや当たり判定の形状を標準では持ちません。動かしたい場合は、後述するMovementコンポーネント(例:Floating Pawn Movement)を追加したり、自前で位置を更新したりする必要があります。この「中身が空に近い分、自由に作れる」点がPawnの最大の特徴です。

Actor・Pawn・Characterの継承関係

Pawnの立ち位置は、クラスの継承関係を押さえると一気に明確になります。UE5の主要なゲームプレイ系クラスは、おおむね次のように積み重なっています。

クラス継承元役割
UObjectUE5のあらゆるオブジェクトの最上位基底クラス。
AActorUObjectレベルに配置・スポーンできる物体の基底。位置・回転・コンポーネントを持つ。
APawnAActorコントローラーにPossessされて操作できるActor。本記事の主役
ACharacterAPawnPawnを二足歩行キャラ向けに拡張。カプセル+CharacterMovement+スケルタルメッシュを標準装備。

つまりCharacterは「歩行機能を盛り込んだPawn」であり、PawnができることはすべてCharacterでもできます。クラス名の接頭辞は、UObject系がU、Actor系がA(APawn、ACharacterなど)という命名規則になっています。

Possess(憑依)の仕組み

Pawnを理解する核心がPossess(ポゼス/憑依)です。Pawn単体はレベルに置かれているだけでは操作できず、Controllerが「Possess」して初めて操作対象になります。イメージとしては、空っぽの肉体(Pawn)に魂(Controller)が乗り移る、という関係です。

クラス操作の主体役割
AControllerPawnを操作するためのController基底クラス。それ自体は描画されない。
APlayerController人間プレイヤープレイヤーの入力を受け取り、Possessしているpawnへ伝える。カメラ管理なども担う。
AAIControllerAI(プログラム)ビヘイビアツリーやナビゲーションに基づき、PossessしたPawnを自律的に動かす。

処理の流れは次のようになります。

  • ControllerがPawnをPossessすると、そのPawnのOnPossessed系処理(C++ではPossessedBy、BlueprintではEvent Possessed)が呼ばれる。
  • PlayerControllerがPossessしているPawnには、プレイヤーの入力が転送される。
  • 操作をやめる際はUnPossessでPawnから切り離す。別のPawnをPossessすれば、操作対象を乗り換えられる(例:キャラから乗り物へ乗り込む)。

1つのControllerが同時にPossessできるPawnは1体です。逆に、Pawnを切り替えながら同じControllerで複数の対象を操作する、といった設計が可能です。

PawnとCharacterの違い

初心者が最も迷うのが「PawnとCharacterのどちらを継承すべきか」です。両者の違いを整理すると次のとおりです。

項目PawnCharacter
カプセルコンポーネント標準では無し(自分で追加)標準で搭載(衝突判定用)
移動コンポーネント無し。必要に応じFloating Pawn Movement等を追加CharacterMovementComponentを標準搭載
歩行・ジャンプ・落下自前で実装歩行・ジャンプ・落下・水中・飛行などを標準サポート
スケルタルメッシュ任意(StaticMeshでも可)スケルタルメッシュを標準で想定(アニメ向け)
自由度・軽さ高い。中身がほぼ空で自由に組める歩行特化のため、非歩行用途では機能が過剰になりがち
主な用途乗り物・ドローン・球体・カメラ等の非歩行体人型・動物など地面を歩くキャラクター

要するに、Characterは「二足歩行のために必要なものを全部入りにしたPawn」です。重力に従って地面を歩き、段差を上り、ジャンプして落下する——こうした挙動を自分で書かずに済むのがCharacterの強みです。

いつPawnを直接使い、いつCharacterを使うか

選択の指針はシンプルです。

  • Characterを使うべきケース:人型・動物など、地面を歩いて移動するキャラクター。プレイヤーの主人公、徒歩で歩き回る敵やNPCなど。CharacterMovementが歩行・ジャンプ・斜面処理まで面倒を見てくれるため、自作する手間が大幅に減る。
  • Pawnを直接使うべきケース歩行モデルが当てはまらない、または不要な対象。たとえば飛行ドローン、宇宙船、車・船などの乗り物、転がる球体、固定カメラ、ボード上を移動する駒など。歩行用の重い機能を持たせず、必要な移動だけを軽量に組みたい場合に向く。

迷ったら「このオブジェクトは地面を二足歩行するか?」と問えば判断できます。歩くならCharacter、それ以外の動き方をするならPawnを直接継承して必要な機能だけを足す、という方針が実務的です。

入力の受け取り方

Pawn(およびCharacter)でプレイヤー入力を扱うには、入力のバインド処理をSetupPlayerInputComponentという関数(C++)で行います。Blueprintの場合は、Pawn内のInput系イベントや、Enhanced Input(UE5標準の入力システム)のInput Actionイベントで受け取ります。

// C++:Pawnの入力バインド(概念例)

void AMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)

{

    Super::SetupPlayerInputComponent(PlayerInputComponent);

    // ここで移動やアクションの入力をバインドする

}

移動を実際に行う際は、AddMovementInput(移動方向と量を与える)や、Floating Pawn Movement/CharacterMovementといったMovementコンポーネントを組み合わせます。重要なのは、これらの入力処理はそのPawnがPlayerControllerにPossessされている間だけ有効という点です。

落とし穴と注意点

つまずきやすいポイント
  • Possessされていないと入力が来ない:レベルにPawnを置いてプレイしても操作できない場合、まずControllerにPossessされているかを疑う。Pawn単体は「操作される側」であり、誰かがPossessしない限り入力は一切届かない。
  • AutoPossessPlayerの設定:プレイ開始時に自動でプレイヤー操作させたいときは、PawnのAuto Possess PlayerPlayer 0等に設定するか、Game ModeのDefault Pawn Classに指定する(この場合はスポーン時に自動でPossessされる)。両方を二重に設定すると、想定外のPawnが操作対象になることがある。
  • AIで動かすならAutoPossessAI:AI制御したいPawnはAuto Possess AIとAI Controller Classを設定する。なおAuto Possess Playerが有効だとAI側のPossessは無視される点に注意。
  • Pawnは標準で動けない:Pawnを直接継承した場合、MovementコンポーネントやAddMovementInput等を入れないと、入力を受けても動かない。「Possessはできているのに動かない」ときは移動処理の有無を確認する。

よくある質問(FAQ)

Q1. PawnとActorの違いは何ですか?
Actorはレベルに配置できる物体すべての基底クラスで、操作されることを前提としていません。Pawnはそのactorを継承し、「Controllerにpossessされて操作される」機能を追加したサブクラスです。操作対象にしたいものはPawn、操作と無関係な置物(ライト、トリガー領域、装飾オブジェクトなど)はActorのままで十分です。

Q2. プレイヤーキャラはPawnとCharacterのどちらで作るべきですか?
地面を歩く人型・動物キャラならCharacterが基本です。歩行・ジャンプ・落下・斜面処理を備えたCharacterMovementを最初から使えるため、実装が楽になります。乗り物や飛行体など歩行モデルに当てはまらないものは、Pawnを直接継承して必要な移動だけを実装するのが向いています。

Q3. Possessを切り替えると何が起きますか?
ControllerがUnPossessで現在のPawnを離し、別のPawnをPossessすると、入力の送り先が新しいPawnに切り替わります。これにより「キャラから車に乗り込む」「複数キャラを切り替えて操作する」といった仕組みを実現できます。ただし1つのControllerが同時にPossessできるPawnは1体までです。

細かい挙動やプロパティの正確な仕様(バージョン差を含む)については、Epic Games公式ドキュメントの確認を推奨します。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Event BeginPlay
  2. Event ActorBeginOverlap
  3. Event Tick
  4. on component begin overlap
  5. On Component Hit
  6. CameraBoom(Spring Arm)
  7. Get Player Character
  8. Nav Mesh Bounds Volume
  9. AI MoveTo
  10. Pawn
  11. Create Render Target 2D
  12. Take High Res Screenshotノード
  13. Sphere Reflection Capture
  14. Event Tickノード
  15. ウィジェットのキャンバスパネル
  16. DefaultSceneRoot
  17. FloatingPawnMovement
  18. Set World Rotation
  19. Event Any Damage
  20. Set World Rotation
  21. VInterp To
  22. Get Socket Transform

最近更新/作成されたページ