Characterクラスによるキャラクター制御
キャラクターの制御に特化したPawn派生クラス
前々回の記事でPawnクラスを紹介しましたが、今回紹介するのはキャラクターの制御に特化したCharacterクラスと言うものです。
このクラスにはキャラクターを動かすために必要な様々な機能やプロパティが用意されています。
それでは、前回インポートしたFBXを使用してCharacterを作成して行きたいと思います。
Character作成
FBXのインポートについては前回記事に記載していますので、そちらをご確認ください。
では、まずCharacterクラスを作成します。
Content Browser内のAdd Newもしくは空白右クリックで作成するBlueprintの親クラスをCharacterを選択してください。
Content Browserに下のようなアイコンが出来たはずです。
今回は名前をMyCharacter_BPとします。
MyCharacter_BPを開きます。
下のような画面になっているはずです。
また、以下のComponentがAddされた状態にあります。
CapsuleComponent・・・カプセル状の範囲を持つComponentで、キャラクター用にCollision(衝突)が設定されている
ArrowComponent・・・Characterの向きを示している
Mesh・・・Characterに設定するMesh
CharacterMovement・・・キャラクターの移動を管理している。
では、次にMeshに前回インポートしたSkeleton Meshを適用します。
MeshのDetailsタブ内にあるMesh > SkeletalMeshのNoneをプルダウンし、
SK_Mannequinを指定します。
すると、下のようなViewになっているはずです。
このままでは、CapsuleComponentからはみ出しているので、Meshの相対位置とCapsuleComponentのサイズを調整して行きます。
CamsuleComponentのDetailsタブ内のShapeにあるCapsule Half Heightを90にします。
MeshのDetailsタブ内TransformのLocationXを-90、RotationZを-90にします。
Rotationも変更したのはArrowComponentの向きにMeshの向きを合わせるためです。
結果、このようになりました。
Characterの向きとMeshの向きが合い、CapsuleComponent内にMeshが収まりました。
ここまで出来たものに、前々回のPawn同様にSpringArmとCameraを追加します。
設定についてはこちらでご確認ください。
Spring ArmのTarget Arm LengthやCameraのTransformationは俯瞰になるぐらいで適宜変更してください。
追加すると下のようなViewになります。
ここまでで一旦Compileして、GameModeのDefault Pawn Classを変更して確認してみます。
GameModeについてはこちらをご確認ください。
World Settingsタブ内のGameModeのDefault Pawn ClassをMyCharacter_BPに変更します。
このように一人たたづむキャラクターが表示されていれば成功です。
Characterを移動させる
ここまででViewの作成は完了しました。
次はCharacterを移動させるための設定とBlueprintを作成して行きます。
まず入力処理を作成して行きますが、入力設定についてはこちらをご確認ください。
今回も作成したMoveForwardとMoveRightイベントを使用します。
まず、キャラクターの前方ベクトルを作成します。
こちらは前々回紹介したものと同じです。
右方ベクトルもGet Right Vectorも使って同様に作成します。
今回はCharacterクラス内にあるCharacter Movementに移動処理を任せるため、
Add Movement Inputというノードを使います。
World Directionで指定したベクトルに対してScale Valueと移動量を掛けたベクトルを足すノードです。
また、移動量はCharacterMovementのWalkSpeedが反映されます。
では、MoveForwardのScaleValueをAdd Movement InputのScale Valueに作成した前方ベクトルをWorld Directionに繋げます。
MoveRightも同様です。
これでBlueprintは完成です。
Compileしてテストしてみましょう。
。。。わかりづらいですが、右前方に移動しました。
アニメーションは設定してないので、静止状態のままですが、前後左右に動かせました。
しかし、このままでは後ろ歩き、カニ歩きしている事になるので進行方向に回転するようにしましょう。
MyCharacter_BP(self)のDetailsタブ内のPawn > Use Controller Rotation Yawのチェックを外します。
このチェックを外さないとControllerの回転が適用され、常にまっすぐを向いてしまいます。
次にキャラクターが回転して後ろに向かった時、Cameraはキャラクターの正面にありたいので、SpringArmのDetailsタブ内にあるCamera SettingsのUse Pawn Control Rotationにチェックを入れます。
これによりCameraにもPawnと同じ分だけ回転が加わるので、後ろに向かっている時でもCameraが正面になります。
常にカメラが後ろを追っかけているようにしたいのであれば、この処理は必要ありません。
次にCharacterMovementのDetailsタブ内にある
General Settings > Orient Rotation to Movement
にチェックを入れます。
こうする事で進行方向に回転するようになります。
Compileして実行してみます。
後ろに向かった時にキャラクターも回転しているので成功です!!
CharacterMovementを見て気づいたかもしれませんが、Fly、Swimming、Jumpといった項目まで存在するので、CharacterMovementを駆使すれば大体のキャラクターの動きを制御出来るのではないでしょうか。
すこし長くなりましたが、今回はCharacterクラスの作成から、移動処理と設定まで紹介しました。
次回はAnimationの適用について紹介したいと思います。