ぼっちゲーム開発

Unreal Engineを中心とした3Dツール周りのネタを備忘録を兼ねて気ままに書き連ねています

PawnとPlayer ControllerによるActor移動

UE4でのプレーヤー操作の基本

前回のGameModeでも少し紹介しましたが、UE4ではプレーヤーが操作するオブジェクトをPawn(駒)と考え、それをコントロールするものとしてPlayer Controllerというものが存在します。

Player ControllerはPawnを所持するといような作りになっており、Pawnの所持を破棄するとPawnに対する操作は行えなくなります。

また、GameModeにPawnとPlayer Controllerを設定する事により、ゲーム開始時にPlayer ControllerはPawnを所持している状態になります。

今回はこのPawnとPlayer Controllerを作成して、Actorを動かしてみたいと思います。

PawnとPlayer Controllerの作成

ではまずPawnとPlayer Controllerを作成します。

Conent Browser内のAdd Newもしくは右クリックのBlueprintを選択して親クラスをそれぞれ選択します。

f:id:msyasuda:20161030152858j:plain

 

Content Browserは下のようなアイコンが二つ出来ています。

PawnクラスをMyPawn_BPとPlayer ControllerクラスをMyPlayerControlller_BPという名前にしました。

 

f:id:msyasuda:20161030153235j:plain

 

また、BlueprintsフォルダとMapsフォルダというフォルダがありますが、

事前に右クリックNew folderで作成しました。

BlueprintsにBlueprint、Mapsにテスト用レベルを保存しています。

既に作ってしまったものを移動させたい場合は移動先フォルダにドラッグ&ドロップしてください。

コピーでよければCopy Here、移動でよければMove Hereを選択してください。

 

f:id:msyasuda:20161030153746j:plain

 

Pawn実装

次にコンポーネントスクリプトを追加して行きます。

MyPawn_BPを開き、Viewportに切り替えたら、Cube Componentを追加します。

f:id:msyasuda:20161030154304j:plain

 

作成して出来たCubeが少し大きいので、Detailタブ内のScaleをそれぞれ0.5ぐらいにします。

 

f:id:msyasuda:20161030154538j:plain

 

次にSpring ArmというComponentを追加します。

Componentリストから探すのは面倒なので、Spring Armと検索して選択します。

 

f:id:msyasuda:20161030154853j:plain

 

すると、下の画像のようにCubeから棒状のものが突き刺さった様な状態になります。

このSpring Armは文字通りバネのようなものを表現するのに適しています。

今回はこのSpring Armの子供としてCamera Componentを追加する事でCubeに追従するカメラを作ります。

 

f:id:msyasuda:20161030155010j:plain

 

次にCamera Component を追加します。

 

f:id:msyasuda:20161030155612j:plain

 

CameraをSpring Armの子供にしたいので、CameraをSpring Armにドラッグ&ドロップします。

 

f:id:msyasuda:20161030160043j:plain

 

追加すると、下のようなViewになったはずです。

 

f:id:msyasuda:20161030160202j:plain

 

このままではCameraの位置と角度が正面を向いた状態ので、少し遠めから俯瞰した状態にします。

Spring Arm のDetailsタブ内のCamera Settings > Target Arm Lengthを500ぐらいにします。

 

f:id:msyasuda:20161030160439j:plain

 

次にカメラの高さと角度を変更します。

Camera Detailsタブ内のTransformを次の値にします。

Location Z = 200、Rotation Y = -20

するとViewは下のようカメラが俯瞰するようになったはずです。

 

f:id:msyasuda:20161030160841j:plain

 

入力によるPawn移動

次に入力からPawnを移動させたいと思います。

以前紹介したInput設定では、レベルブループリントからActorを移動させましたが、それはPawnを継承していないクラスでは、入力処理を扱えないからです。

msyasuda.hatenablog.com

今回はPawnのEvent Graphに直接入力処理を作成して行きます。

また、入力マッピングについては以前紹介したのでそちらを参考にしてください。

入力イベントはMoveForwardとMoveRightを使用します。

 

まず、移動量を求めます。

Axis ValueとGet World Delta Secondsをかける事で、前回処理からの経過時間分のスケールを求めます。

Add pinをクリックすると入力ピンが増えるので、ここに移動量を入力します。

 

f:id:msyasuda:20161030163519j:plain

 

今回は移動量を500にします。

 

f:id:msyasuda:20161030163758j:plain

 

次に移動方向を求めます。

今回は平面での移動だけを想定しているので、Get Control RotationからBreak RotatorでY角度のみを抽出し、Make Rotatorで移動角度を作成します。

 

f:id:msyasuda:20161030163946j:plain

 

また、スカラー値でない出力ピンはピンを右クリックし、Split Struct Pinを選択する事で出力される構造体が分解されて表示されます。

今回はピン数もそれ程多くないのでこの状態で作成して行きます。

 

f:id:msyasuda:20161030164245j:plain

 

次にRotatorから前方ベクトルを取得します。

 

f:id:msyasuda:20161030164443j:plain

 

これで移動方向が求められたので、先に作った移動量と掛け合わせます。

 

f:id:msyasuda:20161030165532j:plain

 

最後にAdd Actor Local Offsetの実行ピンとDelta Locationに求めたベクトルを繋げます。

これでMoveForwardは完成です。

 

f:id:msyasuda:20161030171244j:plain

 

MoveRightはGet Forward Vectorの部分をGet Right Vectorに置き換えます。

 

f:id:msyasuda:20161030171302j:plain

GameModeにPawnとPlayer Controllerを設定する

最後に前回紹介したWorld Settingsに作成したPawnとPlayer Controllerを指定する事により、プレーヤーが操作するPawnが変更されます。

msyasuda.hatenablog.com

 

前回のMyGameModeを使用してWorld Settingsを変更したのが下のものです。

 

f:id:msyasuda:20161030171517j:plain

 

では、実行してみると・・・

 

f:id:msyasuda:20161030171647j:plain

 

静止画ですみません。。。

Cubeが宙に浮いていますが、W、S、D、Aで移動出来ました。

 

今回はPawnとPlayer Controllerを作成してPawnを移動させるまでを紹介しました。

次回はFBXのインポートについて紹介したいと思います。