42.PlayerControllerとは? プレイヤーの操作処理を作ってみよう
PlayerControllerとは?
https://scrapbox.io/files/65c2a47606dbbd0024cc2643.jpg
PlayerControllerとはプレイヤーの操作を管理するブループリントクラスです。このブループリントクラスもゲームモードにセットして使用します。
主に以下の三つのケースで使用する場合があります。
table:PlayerControllerを使用するケース
①マウスや操作の設定を変更する場合
②プレイヤーと操作する処理を別々のブループリントクラスで管理したい場合
③操作するキャラクターを動的(ゲーム中)に変更したい場合
基本的にプレイヤーコントローラーは使用は必須では無く、わざわざ使う事はありません。ただし、PlayerControllerにあるマウスの設定を変更する事などはそれなりの頻度であるのと、公式ドキュメントで見かける「プレイヤーコントローラーが所有する」という意味について解説していこうと思います。
①マウスカーソルを常に表示させたままにしてみよう
例えばメニュー画面ではマウスカーソルを常に表示させる必要があります。既存のテンプレートプロジェクトはゲームをプレイするとマウスカーソルが消えてしまうので、PlayerControllerから常に表示されるように設定していきましょう。プロジェクトはサードパーソンの初期状態のものを使用します。
まずは右クリック > ブループリントクラス > PlayerControllerを選択します。名前を「BP_MyPlayerController」にします。
https://scrapbox.io/files/65c3c356c0dc760024da1710.png
設定からワールドセッティングを開きます。
https://scrapbox.io/files/65c3c3734ae297002509e1dc.png
PlayerControllerClassに作成したMyPlayerControllerをセットします。
https://scrapbox.io/files/65c3c38ccdfd2600255f0f25.png
現時点では、プレイして画面をクリックするとマウスカーソルは消えてしまいます。
https://scrapbox.io/files/65c2f928d2fed10025d8e074.gif
MyPlayerControllerを開きます。
https://scrapbox.io/files/65c3c3d408262c00256aec77.png
詳細にマウスや操作関連の設定があるのでShowMouseCursorのチェックを入れます。
https://scrapbox.io/files/65c3c40e5670d10023fed2c0.png
これでプレイしてみるとマウスカーソルは表示されたままになります。ちょっと見にくいですがマウスは表示されたままになっています↓
https://scrapbox.io/files/65c3c44877814900241198fb.gif
ちなみに作成したMyPlayerControllerはゲームモードと同様、プレイすると自動でスポーンしてワールドアウトライナ―でも確認できます。
https://scrapbox.io/files/65c3c469780f110025bdd83c.png
では今度は動的(ゲーム中)にマウスカーソルを非表示にしてみましょう。レベルブループリントを開いて以下のノードを作成します。Deleteキー作成後、GetPlayerController(ゲームのプレイヤーカテゴリにあるノード)を作成してShowMouseCursorノードを追加します。
https://scrapbox.io/files/65c3c4f173246c00248460f5.png
GetPlayerControllerノードでPlayerControllerを取得して、PlayerControllerにあるマウス表示設定をShowMouseCursorで変更しています。
ShowMouseCursor
マウスの表示非表示を切り替えることができるノードです
プレイしてDeleteキーを押して、一度クリックしてみるとマウスカーソルが消えます。ちょっと見辛いですが、途中で消えています↓
https://scrapbox.io/files/65c3c6524a97530023fabc7c.gif
🐱PlayerControllerを使用するケースはこんな感じで操作関連の設定を変更する場合が一番多いかなと思います。
②プレイヤーと操作処理を分けてみよう
プレイヤーコントローラーを使用するケースとしてまず一つ目がキャラクター本体と操作処理を分けられるという事が挙げられます。操作処理を分ける事でキャラクターを入れ替えても同じように操作する事ができます。イメージです↓
https://scrapbox.io/files/65c3c6f8148c120025d57815.jpg
こんな感じにPlayerControllerでキャラクターを操作する事ができます。ただしゲーム中にキャラクターを入れ替えるという事は稀ですし、ほとんどの場合は一体のキャラクターを操作するゲームになると思うのでその場合はキャラクター本体に操作処理を記載すれば良いので、基本的にPlayerControllerは使用する必要性は低いです。しかしプレイヤーコントローラーがどんな感じに使用するのか把握するために実際に使ってみましょう。プロジェクトは上記の「①マウスカーソルを常に表示させたままにしてみよう」の状態から進めていきます。
BP_ThirdPersonCharacterのイベントグラフを開きます。
https://scrapbox.io/files/65c3c9d6824a110024bef8a1.png
全てのブループリントを削除します。今回はプレイヤーコントローラーの方に操作関連の処理を作るためです。
https://scrapbox.io/files/65c3ca372c3d110025ce47b6.png
作成したMyPlayerControllerを開きます。
https://scrapbox.io/files/65c3ca5c780f110025be02d2.png
MyPlayerControllerのイベントグラフに以下のノードを作ります。space barと検索してスペースバーノード、Jumpノード、GetPlayerCharacterノードを作成します。
https://scrapbox.io/files/65c3ca81994d8b0025700ab3.png
プレイしてみてスペースバーを押してみましょう。
https://scrapbox.io/files/65c3cac94b241300246859bf.gif
PlayerControllerからキャラクターをジャンプさせる事ができました。
このようにPlayerConrtrollerは操作する処理を分けて実装する場合に使用したりします。
https://scrapbox.io/files/65c3cae988ccaa0025f99812.png
😺PlayerControllerと操作するキャラクター別々に実装できたので、次に操作するキャラクターを変更してみましょう。ただその前に"プレイヤーコントローラーの所有"というワードについて解説します。
"プレイヤーコントローラーが所有する"の意味とは?
プレイヤーコントローラーは常に特定のキャラクターを所有(Possess)しています。所有とは"操作対象"の事になります。つまり操作するキャラクターをプレイヤーコントローラーが決定しているという事になります。
https://scrapbox.io/files/65c3cb735dbd79002550f921.png
特に公式のドキュメントなどに出てくるワードなので、例えば"ポーンを所有する"というワードが出てきたら"プレイヤーコントローラーで操作しているポーン(プレイヤー)"の事なんだなと解釈しましょう。ゲームモードのDefaultPawnClassにセットしたプレイヤーは自動的にPlayerContorollerが"所有"した状態となり、操作入力を受け付けることが可能となります。今回の場合だとゲームモードにセットされているのはBP_ThirdPersonCharacterなので、MyPlayerControllerがBP_ThirdPersonCharacterを所有した状態になっています。
シンプルに「PlayerControllerが所有するキャラクター = 操作しているキャラクター」という意味になります。
③操作するキャラクターを変更してみよう
では所有するキャラ、つまり操作するキャラクターを変更してみましょう。プロジェクトは「②プレイヤーと操作処理を分けてみよう」の状態から進めます。
一度BP_ThirdPersonCharacterをレベルに出します。
https://scrapbox.io/files/65c3cbaf2d43c000244503d1.png
この状態でプレイしてみましょう。
https://scrapbox.io/files/65c3cbf2994d8b00257016ad.gif
ゲームモードによってスポーンする操作可能なキャラクター(左)と、ただのキャラクター(右)が配置された状態になります。
https://scrapbox.io/files/65c3cc1c64a5e300264ad9f2.png
これはPlayerControllerが所有(操作)するキャラクターはゲームモードのDefaultPawnClassにセットしてあるプレイヤーが優先されるため、左のキャラクターが操作できるといった仕様になっているためです。
では今度は所有するキャラを右の既に配置されたキャラに変更してみましょう。
既存の配置されたBP_ThirdPersonCharacterを選択して詳細を確認していきます。
https://scrapbox.io/files/65c3cc474e0e4a0024a282f8.png
AutoPossessPlayerという項目が、現在Disabled(無効)となっていますが、それをPlayer0に変更します。
https://scrapbox.io/files/65c3cc87c92ff90024c034be.png
AutoPossessPlayerとは?
AutoPossessPlayerでプレイヤーコントローラーが所有するキャラクターの優先順位を決定する事ができます。AutoPossessPlayerをPlayer0とする事で、操作するキャラクターを指定する事ができます。
少しゲームモードでスポーンする場所とキャラの位置が被っていてわかり辛いので、レベルに配置したBP_ThirdPersonCharacterを適当な場所に移動させます。
https://scrapbox.io/files/65c3cd68b414d0002667238e.png
プレイしてみると既存のキャラクターが所有(操作)対象とみなされて操作できます。
https://scrapbox.io/files/65c3ce35b617440025d120c4.gif
この時、もう既にプレイヤーはレベルに存在しているという認識になっているので新たにゲームモードにセットしてあるプレイヤーはスポーンしません↓
https://scrapbox.io/files/65c3ce5b7dcc4d00236b75d2.png
😺こんな感じにプレイヤーコントローラーが所有するキャラ、つまり操作するキャラクターを指定する事ができます。では最後にゲームプレイ中に操作するキャラクターを変更してみましょう。
④ゲームプレイ中に操作するキャラクターを変更する|実践
ではプレイヤーコントローラーとキャラクターで操作する処理を分けれたので次に、ゲームプレイ中にキャラクターを変更してみたいと思います。プレイヤーコントローラーに操作処理を記載しておりキャラと別々で実装しているので、キャラを変更しても操作が可能です。
BP_ThirdPersonCharacterをもう一体追加します。
https://scrapbox.io/files/65c3cfa0a4fd5b0024c3358b.png
次に2体をCtrl+クリックで選択した状態でレベルブループリントを開きます。
https://scrapbox.io/files/65c3cfd12e230500245e3e0e.png
右クリック > アクタのリファレンスを作成を選択します。これで二体のアクタの参照ができました。
https://scrapbox.io/files/65c3d0020824b100269f1d9e.png
ノードを以下のように作成します。1キーと2キーイベントから、GetPlayerController(ゲームのプレイヤーカテゴリにあるノード)からPossessノードを作成します。
https://scrapbox.io/files/65c3d049917f6a00238d1a3c.png
Possessノードとは?
Possessノードとはプレイヤーコントローラーが所有する、つまり操作するキャラクターを指定するためのノードです。GetPlayerControllerで現在のプレイヤーコントローラーを取得して、そのプレイヤーコントローラーが所有するキャラクターをInPawnピンに接続する事で操作可能になります。
プレイして1または2キーを押すと操作キャラが変更されて、かつ対象のキャラクターが操作できるようになりました。
https://scrapbox.io/files/65c3d1c4630e400024b9bcc2.gif
🌟PlayerControllerとは?まとめ
PlayerController = プレイヤーの操作を管理するためのブループリントクラスです。ゲームモードのPlayerControllerClass(操作するためのブループリントクラス)にセットする事で使用できます。イメージにするとこんな感じ↓に別のブループリントクラスで操作を実装する事ができる訳です。
https://scrapbox.io/files/65c3cae988ccaa0025f99812.png
しかしプレイヤーコントローラーを使用する事は必須ではなく、キャラと操作処理を別々にしたい時など特殊なケースの場合のみ使用します。一般的なゲームでは基本的にそのままキャラクター本体のブループリントクラスに操作処理を記載した方が直感的なのでお薦めです。
https://scrapbox.io/files/65c3d3e3148c120025d5cacc.png
なので、プレイヤーコントローラーを使用する場合は主にマウスなどの操作関連の設定変更を行いたい時ぐらいになります。述べたように操作する処理を別で作れるという利点があるため、例えば操作するキャラをゲーム中に変更させたい場合やスコアなどをプレイヤーとは別に保持させたい場合に使用する場合があります。