プレイヤーキャラクターの作成

ハードウェアからの入力を取ってキャラクターを動かせるようにしたい。

1. 入力マッピングを設定する

ツールバーの[セッティング]>[プロジェクト設定]>[インプット]を選択

アクションマッピング

アクションマッピングを設定する。アクションマッピングは離散値の入力を扱う設定。
「押した時」と「離した時」にイベントが呼び出される。
[Bindings]内の[Action Mappings]の[+]アイコンをクリックし、アクションを設定。

アクシスマッピング

アクシスマッピングを設定する。アクシスマッピングは連続値の入力を扱う設定。
[Bindings]内の[Axis Mappings]の[+]アイコンをクリックし、アクションを設定。

全て設定すると下の図のようになる。


2. プレイヤーキャラクターを作成

ブループリントを作成

アセットツリーで[Blueprints]フォルダを選択し、[新規追加]から[ブループリント クラス]を選択する。
親クラスに[Character]を選択し、[ゲームタイトルの略語 + キャラ名 + Pawn]というように名付ける。
 例(PNPlayerPawn)

カプセルの高さを調整

[Character]クラスを親にしたクラスブループリントは、キャラと地形の衝突判定をする[CapsuleComponent]が初めからアタッチされている。
この高さを調節する。

ブループリントエディタを開き、[コンポーネントパネル]で[CapsuleComponent]を選択する。
[詳細パネル]で[Shape]>[Capsule Half Height]を編集する。

メッシュアセットの割り当て

[CapsuleComponent]内の[Mesh]にスケルタルメッシュアセットをあり当てることで、外見を変更できる。

[コンポーネント]パネルで[Mesh]を選択する。
・[詳細]パネルの[Mesh]>[Skeltal Mesh]に1でインポートしたキャラクターのスケルタルメッシュアセットを割り当てる。
・トランスフォームで[位置]と[回転]のzを調整する。
  [回転]は緑の矢印と青の矢印が同じ向きを向くようにする。


3. カメラの設定

コンテンツブラウザで[Blueprints]>[PNPlayerPawn]をダブルクリック。
[コンポーネント]パネルの[コンポーネントを追加]から[Spring Arm]と[Camera]を追加する。
[Camera]を[Spring Arm]の子にする。

[Spring Arm]の[詳細パネル]で設定を行う。
・[Camera]の[Spring Arm Length]を調整。(例:1500)
・[トランスフォーム]の[回転]を調整。
・[Camera Collision]の[Do Collision Test]のチェックを外す。

[Camera]の[詳細パネル]で[Camera Settings]>[Field Of View]で画角を調整する。(例:50)

CameraManagerの作成

コンテンツブラウザで[コンテンツ]>[Blueprint]>[PNPlayerController]をダブルクリック。
[詳細パネル]>[Player Controller]>[Player Camera Manager Class]の右の[+]ボタンをクリックして[Blueprints]フォルダの中に[PlayerCameraManager]を作成する。

カメラ処理のオーバーライド

以下の変数を定義する。

変数名 編集可 初期値
DesiredRotation Rotator チェック X:0.0, Y:10.0, Z:180

「BlueprintUpdateCamera」をオーバーライドした関数を作成する。
以下のようにBPを組む。

[MakeVector]ノードの[X]入力ピンから左へワイヤーを伸ばして、[変数へ昇格]を選択し、新しく作成された変数に「DesiredDistance」と名付け、[詳細]パネルで[編集可能]にチェックを入れる。
コンパイルして「DesiredDistance」の初期値を「1200」にする。
[ReturnNode]ノードの[NewFOV]入力ピンから左にワイヤーを伸ばし、[変数へ昇格]を選択して、新しく作成された変数に「DesiredFOV」と名付け、[詳細]パネルで[編集可能]にチェックを入れる。
コンパイルして「DesiredFOV」の初期値を「50」にする。

PlayerControllerでCameraManagerをキャッシュする

アセットツリーの[Blueprints]>[新規追加]>[Blueprintクラス]を選択。
親クラス選択で[PlayerController]を選択肢「ゲームタイトルの略 + PlayerController」と名付ける。
 例)「PNPlayerController」

「PNPlayerController」を開く。
新しい変数「MyCameraManager」を作成。
変数の種類を[オブジェクトリファレンス]>[PNPlayerCameraManager]に設定して、[プライベート]にチェックを入れる。
下のようにBPを組む。

このキャッシュを外からもアクセスできるようにする。
新しい関数「GetPNPlayerCameraManager」を作成し、[詳細パネル]で「Pure」にチェックを入れる。
出力値を一つ追加し「ReturnValue」と名付け、出力値の種類に[オブジェクトリファレンス]>[PNPlayerCameraMnager]を指定する。
下のようにBPを組む。

カメラを回転させる

「PlayerCameraManager」を開く。
新しい関数「AddYawInput」を作成する。
[詳細パネル]>[inputs]に「val」Float型を追加。
以下のようにBPを組む。

[ブランチ]ノードの[Condition]入力ピンから左上にワイヤーを伸ばし、[変数へ昇格]を選択する。新しく作成された変数に「IsEnableControl」と名付ける。
コンパイルして「IsEnableControl」の初期値を「True」にする。

「AddYawInput」関数を複製して「AddPitchInput」関数を作成。
下のようにBPを編集。

「PNPlyaerController」を開く。
下のようにBPを組む。

「PlayerCameraManager」を開く。
カメラの回転に角度制限を加える。
[クラスのデフォルト]>[PNPlyaerCameraManager]を設定。

4. プレイヤー移動の実装

コンテンツブラウザで[Blueprints]>[PlayerCameraManager]を開く。

カメラの向きを取得する関数を作成

新しい関数「GetCameraForwardVector」を作成。
[詳細パネル]で「Pure」にチェックをいれ、出力値を一つ追加して「ReturnValue」と名付け、変数の種類を「Vector」に設定する。
下のようにBPを組む。

「GetCameraForwardVector」関数を複製して「GetCameraRightVector」関数を作成。
下のようにBPを組む。

移動処理

「PNPlayerController」を開く。
下のようにBPを組む。

「BP_Player」を開く。
[class Defaults]>[Pawn]>[UseControllerRotationYaw]のチェックを外す。

[コンポーネント]パネルの[Character Movement(継承)]の[詳細]パネルから、[Character Movement (Rotation Setting)]>[Orient Rotation to Movement)]にチェックを入れる。

歩行速度の初期値を設定。
[コンポーネント]パネルの[CharacterMovement(継承)]を選択し、[詳細]パネルから[Character Movement: Walking]>[Max Walk Speed]を調整。

5. アクション(デジタル入力)を使う

  1. インプットアクションノードをグラフに追加する
  2. [コンポーネント]パネルの[CharacterMovement(継承)]をドラッグ&ドロップする
  3. ボタンを押した時、離した時の処理を書く

スプリントの場合は以下のようになる。


6. ゲームモードを設定する

「ゲームモード」とはプレイヤーキャラは何か、どのようなプレイヤーコントロール、カメラ制御を行うかといった情報を設定するもの。
ゲームモードはマップ単位で変更できる。

アセットツリーの[Blueprints]>[新規追加]>[Blueprintクラス]を選択。
親クラス選択で[Game Mode Base]を選択肢「ゲームタイトルの略 + GameMode」と名付ける。
 例)「PNGameMode」

[PNGameMode]をダブルクリックしてブループリントエディタを起動する。
[詳細]パネルの[Classes]>[Default Pawn Class]プロパティに[PNPlayerPawn]を割り当てる。
[詳細]パネルの[Classes]>[Player Controller Class]プロパティに[PNPlayerController]を割り当てる。

レベルエディタに戻り、メニューバーの[ウィンドウ]>[ワールドセッティング]を選択し、レベルエディタにワールドセッティングパネルを追加する。
[ワールドセッティング]パネルの[Game Mode]>[GameMode Override]プロパティに[PNGameMode]を割り当てる。