【UE4】移動方向に対するキャラクターとカメラの回転 / Controller rotation setting for character and camera
アクションゲームでキャラクターとカメラの回転の動きを作るのに非常に悩んだことがあります。カメラは回転させるがプレイヤーキャラは回転させない、キャラクターとカメラが同じ方向を向いているとき移動方向に対してキャラを回転させないなどです。
後者は一部BPで組む必要はありますが単純にカメラ、キャラクターの回転をどのようにさせるかだけだとBPを特別に組む必要はありません。
苦労した理由はそれらがBP内でノードを組んで作るものではなくComponentの設定でプロパティのどれにチェックを付けるか付けないかで決まったからです。
ずっとノードで組もうとして色々やってもほとんど意味がなかったわけですね。。
内容がもしかしたら不正確な部分もあるかもしれません。その場合指摘していただけると幸いです。
説明にはThirdPerson templateを使用していますが使用しているキャラクターはアニメーションスターターパックに入っている「Ue4ASP_Character」を使っています。
アニメーションスターターパック
まず前提としてコントローラーの回転は以下のように組んでいるものとします。
TurnはマウスのX軸方向の動きを入力としてLookUpはY軸になっています。
Controllerからの入力はPawnキャラクターそしてカメラを実質動かしているCamera Boom(Spring Arm)はCapsuleComponentから取得しているはずです。
キャラクターとカメラの回転には以下の3つのコンポーネントが関わっています。
・(self)
・CameraBoom (SpringArm)
・CharacterMovement
まずBP名(self)をクリックしてDetailsを見るとPawnのカテゴリに
Use Controller Rotation Pitch
Use Controller Rotation Yaw
Use Controller Rotation Roll
とあるはずです。
デフォルトではYawの部分のみチェックがついていると思います。これはキャラクターの回転はYaw以外ほとんど使わないということから来ているのでしょう。
この説明を見ると
If true, this pawn's yaw will be updated to match the Controller's ControllRotation Yaw,..
とあります。
訳すと、チェックがついているならばこのPawnキャラクターはコントローラのControlRotation Yawに合うようアップデートされる
簡単に言うとコントローラのYaw回転に合わせてキャラのYawも一緒に回転するよ
ということです。
これにチェックがついていると(基本として)以下のようなキャラの動きになると思います。
私が欲しかった動きは上のようなものではなく、カメラがキャラクターの周りを回れるような動きでした。
説明通りチェックが付いていない場合だと、逆にキャラクターの回転はコントローラーの回転に依存していないので以下のようになります。
実はUse controller Rotationのチェックが外れていても他のコンポーネントのあるプロパティにチェックがついているとキャラがコントローラーの回転に合わせて回転してしまう場合があります。それはCharacterMovementのRotationgSettingsにあるUse Controller Desired Rotationにチェックが入っている場合です。
とりあえずそれは置いておいて次はCameraBoom(Spring Arm)について、
Components panelからCameraBoomをクリックしてDetailsのCamera Settingsを見てみます。
ここでSpring Armの回転の設定をするのですが、ここでSpring Armの回転はPawnコントローラーの回転を継承するかどうが決めることが出来ます。
チェックを全部オフにしてPlayするとカメラが全く回転しなくなります。
(キャラクターは回転しカメラが回転しない人もいればキャラもカメラも回転しない人もいるはずです)
カメラをControllerの入力で回転させたい場合はチェックを入れます。逆にカメラを固定させたい場合はチェックを外します。
もちろん特定の軸だけ継承するというのもできます(inherit Pitch, Yaw and Roll)
そして最後に一番厄介なのがCharacterMovement部分での設定です。
DetailsからCharacterMovement(Rotation Settings)を見てみます。
その中にあるOrient Rotation to Movementが重要なのですが
簡単に説明するとキャラクターの移動の向きに対してキャラも一緒に回転させるというもの。
キーボードの↑↓←→で移動しているとすると↓を押すとキャラクターが↓向きに方向転換します(キャラが最初北向きになっている場合180度回転して南向きになる)
というふうに移動方向に合わせてキャラも回転するということです。
が、しかし
説明文の最後にこう書いてあります。
Nomally you will want to make sure that other setting are cleared such as UseControllerRotationYaw on the character.
つまり、(self) > Pawn > のUse controller Rotation Yaw(Pitch,Roll)にチェックがついてるとこちらが優先されてキャラクターは移動方向に回転しないのです。
まとめ
キャラクターをコントローラーの回転に合わせて回転させる場合は(self)>Use Controller Rotationにチェック
キャラクターを移動方向に合わせて回転させたい場合(CharacterMovement)>Orient Rotation to Movementにチェック、そしてUse Controller Rotationはオフ。
ついでにUse Controller RotationとOrient Rotation to MovementどっちもオフにしてかつUse Controller Desired Rotationにチェックを入れるとコントローラーの回転に合わせてキャラも回転します。
ココらへんは複雑で混乱しやすい部分なので自分で試しながら確認するほうがわかりやすいはずです。