Unreal Engine 4でおっさんを操作する!

2019年3月3日

BlenderでエクスポートしたおっさんモデルとアニメーションのFBXを、UE4へインポートするまでできました!

今回はおっさんをプレイヤーキャラクターとして、UE4で操作できるようにしたいと思います!

※記事がポリシー違反とされたため、一部画像をテストで黒塗りにしています(汗

スポンサーリンク

プロジェクト設定でインプットを定義する!

おっさんを操作するのに当たり、まず最初に必要となるのは「何を押したら何をする」といった情報でしょう。

これを定義する場所が、UE4のメニュー欄、「編集」→「プロジェクト設定」にあります!

プロジェクト設定画面を開くと、なにやらたくさんの項目が出てきますが、「エンジン」項目の「インプット」を選択します。

その中の「Bindings」に「Action Mappings」と「Axis Mapping」という箇所に、入力イベントと入力キーを定義していきます。

「Action Mappings」はボタン押下時、離した時にトリガーとしてイベントを起こす様なアクションを定義する部分です。ジャンプや攻撃なんかはこちらで行うのが良いと思います。

「Axis Mappings」は、ゲームパッドのジョイスティックのような傾き加減を考慮できる入力定義です。Scale値には軸を傾けた際の乗数が定義できるので、後ろ移動だけ低速とか緩急が付けられそうです。移動等のアクションが最適かと思います。

今回は「Action Mappings」にジャンプ→スペースバー、おっさんが帰って来れなくなったように初期座標戻り→左シフトキーを定義、「Axis Mappings」にはWASDでキャラクターの前後左右移動を定義しました!

GameModeを定義する!

おっさんモデルを操作するに当たり、GameMode→Player Controller Class→Default Pawn Classという三つの要素の継承関係を把握する必要がありました!

GameModeですが、これはデフォルトのプレイヤー操作キャラ情報、キー入力情報、メニューとかで使えるHUD(ヘッドアップディスプレイ)情報など、ゲームシーンの根幹とも言える要素を親として持ちます。

なのでまずGameModeを作成し、おっさんキャラ用のキャラ情報と入力情報を設定できるようにします。

コンテンツプラウザ内で右クリックして、ブループリントクラスを指定します。

Game Mode Base を選択してブループリントを作成します。

次に、ウィンドウのワールドセッティングを表示します。するとGame Modeという項目内に「GameMode Override」という箇所があるので、自身で作成したGameModeのブループリントを指定してあげます。

すると、プレイヤーキャラのBP(ブループリント)と入力制御のBPを追加できる項目がありますので、GameModeに対応したそれらのBPを作成指定できるようになります。

Default Pawn Classを作成する!

親子関係としてはGameMode→Player Controller Class→Default Pawn Classとなっていますが、Player Controller Classより先にこちらを作成指定しておきます。

コンテンツプラウザで右クリック、ブループリントクラス→Characterを選択し作成します。

ゲーム中のオブジェクトはActorクラスで、特に入力制御を考慮したActorがPawnとなっています。Pawnをさらにキャラクター制御に特化させたクラスがCharacterクラスとなっているようなので、人型のおっさんをプレイヤーキャラとするならこのクラスが良い気がしました。

早速Characterクラスを編集していきます。

開くと何も無い空間にカプセルが浮かんでるような状態となっております。

まずコンポーネントのMeshを選択し、Skeletal Meshにおっさんモデルを指定します。するとビューポートにおっさんモデルが出現するので、カプセルをおっさんモデルに良い感じに合わせます。

コンポーネントのCapsuleComponent内にカプセルの形状を編集できるShape項目があるので、そこのパラメーター「Capsule Half Height」、「Capsule Radius」でカプセルの高さと幅が変更できます。

このカプセルがおっさんの当たり判定とかになるんですねぇ~。

次にキャラクターに追従するカメラを実現するため、コンポーネントのMeshの子として「Spring Arm」コンポーネント、さらにその子として「Camera」を追加します。

Spring ArmコンポーネントのCamera項目に「Target Arm Length」でおっさんとカメラの距離、Cameraコンポーネントのトランスフォーム項目でカメラ位置と角度を調整しておっさんに追従するカメラのセッティング完了となります!

とりあえずこれでGameModeにセットできるDefault Pawn Classが用意できたので、ワールドセッティングのDefault Pawn Classにセットしてあげます。

Player Controller Classを作成する!

Player Controller Classはキャラクターの操作制御に特化したクラスのようです。

例えばゲーム中でプレイヤーキャラがおっさんからスーパー美少女に変更された場合、入力制御をおっさんのCharacterクラスに実装していた場合は入力制御が消えてしまいます。

Player Controller Classに実装しておけば、共通の制御として美少女も同様に操作できるという事でしょう!

コンテンツプラウザ内で右クリックでブループリントクラスを選択→Player Controllerを作成します。

作成したPlayer Controllerをダブルクリックして、イベントグラフを表示します。

ここからようやく、ブループリントが活躍していきます!

BeginPlayからの初期化処理を組みました。変数として、おっさん用のPawnクラスを確保するためのPawn変数、左Shiftキーで初期座標へ戻るための初期座標確保用のVector変数を用意しました。それらの変数に値をセットするのがこの初期化処理です。

次に前後移動処理です、プロジェクト設定のインプットで定義した前後移動のイベントを呼び出してます。やってる事は確保したおっさんPawnクラスから正面ベクトルを取得し、その方向に移動って感じです!

左右移動は、前後移動とほとんど一緒です。インプットイベントが左右用なのと、正面ベクトルではなく右方向ベクトルを取得している点が違います。

※2018/5/20 追記  前後、左右移動に関する画像ですが、どちらも「Get Control Rotation」と「Make Rotator」をY Pitchで繋いでいますが、正しくはZ Yawで繋がないと駄目ですね(涙

ジャンプ処理です。CharacterクラスがJumpっていう関数を持っているんですねぇ~。それ呼ぶだけでジャンプしたんでびっくりしました!

Jumpを呼ぶためにPawnクラスをCharacterクラスにキャストして変換してます。

jumpの飛ぶ量とかの細かい設定は、自身で作成したCharacterクラスのBP内にコンポーネントでCharacterMovementというのがあり、その詳細の「Character Movement: Jumping / Falling」で色々設定できるようですね~。

最後に初期座標へ戻る処理です。変数で覚えといた初期座標を直接セットしてあげてるだけですね。

これでPlayer Controller Classも作成が終わったので、ワールドセッティングのGame Mode項目の「Player Controller Class」にセットしてあげます。

準備完了!いざ操作!

これでおっさんを操作するための一通りの準備は整いました!早速実行してみますと・・・・。

蟹スライドを開始しました、進行方向を向いてくれません!右行ったら右向いて欲しいんですよね・・・・・(汗

で、進行方向に回転する設定もCharacterクラスが持って居ました!自分でブループリント組まなくて良いんですねぇ~凄い!

自身で作成したCharacterのBP内の、詳細にPawn項目があるので、その中の「Use Controller Rotation Yaw」のチェックを外します。これで回転の固定を解除します。

次にコンポーネントのCharacter Movementの詳細にCharacter Movement(Rotate Settings)というのがあるので、その中の「Orient Rotation to Movement」をチェックします。

この状態でキャラは回転するのですが、カメラが常におっさんの後ろを維持するため、おっさんが回転するとグワングワンして気持ち悪かったです(涙

なのでSpring Armの常に後ろに付く設定を解除します。Spring Armの詳細、Camera Settings内に「Use Pawn Control Rotation」があるのでコレをチェックONします!

色々と設定箇所がありましたが、改めて早速操作です!

大丈夫です!おっさんは無事進行方向に回転し、ジャンプもしました!

適当に置いたキューブの上にとりあえず乗ってみました。

 

次回は、このデフォルトポーズのまま移動するのは不気味なので、用意したモーションを移動とジャンプに合わせてするようにしたいと思います!

スポンサーリンク