ぼっちゲーム開発

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

Characterクラスによるキャラクター制御

キャラクターの制御に特化したPawn派生クラス

前々回の記事でPawnクラスを紹介しましたが、今回紹介するのはキャラクターの制御に特化したCharacterクラスと言うものです。

このクラスにはキャラクターを動かすために必要な様々な機能やプロパティが用意されています。

それでは、前回インポートしたFBXを使用してCharacterを作成して行きたいと思います。

Character作成

FBXのインポートについては前回記事に記載していますので、そちらをご確認ください。

msyasuda.hatenablog.com

 

では、まずCharacterクラスを作成します。

Content Browser内のAdd Newもしくは空白右クリックで作成するBlueprintの親クラスをCharacterを選択してください。

 

f:id:msyasuda:20161101172425j:plain

 

Content Browserに下のようなアイコンが出来たはずです。

今回は名前をMyCharacter_BPとします。

 

f:id:msyasuda:20161101172705j:plain

 

MyCharacter_BPを開きます。

下のような画面になっているはずです。

また、以下のComponentがAddされた状態にあります。

CapsuleComponent・・・カプセル状の範囲を持つComponentで、キャラクター用にCollision(衝突)が設定されている

ArrowComponent・・・Characterの向きを示している

Mesh・・・Characterに設定するMesh

CharacterMovement・・・キャラクターの移動を管理している。

f:id:msyasuda:20161101172907j:plain

 

では、次にMeshに前回インポートしたSkeleton Meshを適用します。

MeshのDetailsタブ内にあるMesh > SkeletalMeshのNoneをプルダウンし、

SK_Mannequinを指定します。

 

f:id:msyasuda:20161101173919j:plain

 

すると、下のようなViewになっているはずです。

このままでは、CapsuleComponentからはみ出しているので、Meshの相対位置とCapsuleComponentのサイズを調整して行きます。

 

f:id:msyasuda:20161101174525j:plain

 

CamsuleComponentのDetailsタブ内のShapeにあるCapsule Half Heightを90にします。

 

f:id:msyasuda:20161101175231j:plain

 

MeshのDetailsタブ内TransformのLocationXを-90、RotationZを-90にします。

Rotationも変更したのはArrowComponentの向きにMeshの向きを合わせるためです。

 

f:id:msyasuda:20161101175057j:plain

 

結果、このようになりました。

Characterの向きとMeshの向きが合い、CapsuleComponent内にMeshが収まりました。

 

f:id:msyasuda:20161101175653j:plain

 

ここまで出来たものに、前々回のPawn同様にSpringArmとCameraを追加します。

設定についてはこちらでご確認ください。

 

msyasuda.hatenablog.com

 

Spring ArmのTarget Arm LengthやCameraのTransformationは俯瞰になるぐらいで適宜変更してください。

追加すると下のようなViewになります。

 

f:id:msyasuda:20161101180433j:plain

 

ここまでで一旦Compileして、GameModeのDefault Pawn Classを変更して確認してみます。

GameModeについてはこちらをご確認ください。

 

msyasuda.hatenablog.com

 

World Settingsタブ内のGameModeのDefault Pawn ClassをMyCharacter_BPに変更します。

 

f:id:msyasuda:20161101180901j:plain

 

このように一人たたづむキャラクターが表示されていれば成功です。

 

f:id:msyasuda:20161101181153j:plain

Characterを移動させる

ここまででViewの作成は完了しました。

次はCharacterを移動させるための設定とBlueprintを作成して行きます。

まず入力処理を作成して行きますが、入力設定についてはこちらをご確認ください。

今回も作成したMoveForwardとMoveRightイベントを使用します。

msyasuda.hatenablog.com

 

まず、キャラクターの前方ベクトルを作成します。

こちらは前々回紹介したものと同じです。

 

f:id:msyasuda:20161101182930j:plain

 

右方ベクトルもGet Right Vectorも使って同様に作成します。

 

f:id:msyasuda:20161101184559j:plain

 

今回はCharacterクラス内にあるCharacter Movementに移動処理を任せるため、

Add Movement Inputというノードを使います。

World Directionで指定したベクトルに対してScale Valueと移動量を掛けたベクトルを足すノードです。

また、移動量はCharacterMovementのWalkSpeedが反映されます。

 

f:id:msyasuda:20161101183232j:plain

 

では、MoveForwardのScaleValueをAdd Movement InputのScale Valueに作成した前方ベクトルをWorld Directionに繋げます。

 

f:id:msyasuda:20161101184346j:plain

 

MoveRightも同様です。

 

f:id:msyasuda:20161101184800j:plain

 

これでBlueprintは完成です。

Compileしてテストしてみましょう。

 

。。。わかりづらいですが、右前方に移動しました。

 

アニメーションは設定してないので、静止状態のままですが、前後左右に動かせました。

しかし、このままでは後ろ歩き、カニ歩きしている事になるので進行方向に回転するようにしましょう。

 

f:id:msyasuda:20161101190507j:plain

 

MyCharacter_BP(self)のDetailsタブ内のPawn > Use Controller Rotation Yawのチェックを外します。

このチェックを外さないとControllerの回転が適用され、常にまっすぐを向いてしまいます。

 

f:id:msyasuda:20161101181807j:plain

 

次にキャラクターが回転して後ろに向かった時、Cameraはキャラクターの正面にありたいので、SpringArmのDetailsタブ内にあるCamera SettingsのUse Pawn Control Rotationにチェックを入れます。

これによりCameraにもPawnと同じ分だけ回転が加わるので、後ろに向かっている時でもCameraが正面になります。

 

常にカメラが後ろを追っかけているようにしたいのであれば、この処理は必要ありません。

f:id:msyasuda:20161101191451j:plain

 

次にCharacterMovementのDetailsタブ内にある

General Settings > Orient Rotation to Movement

にチェックを入れます。

こうする事で進行方向に回転するようになります。

 

f:id:msyasuda:20161101182402j:plain

 

Compileして実行してみます。

後ろに向かった時にキャラクターも回転しているので成功です!!

 

f:id:msyasuda:20161101192021j:plain

 

CharacterMovementを見て気づいたかもしれませんが、Fly、Swimming、Jumpといった項目まで存在するので、CharacterMovementを駆使すれば大体のキャラクターの動きを制御出来るのではないでしょうか。 

すこし長くなりましたが、今回はCharacterクラスの作成から、移動処理と設定まで紹介しました。

 

次回はAnimationの適用について紹介したいと思います。