Unityのスタンダードアセットを改変して、TPSキャラクターの動き方を変えてみました。
キャラクターにスタンダードアセットの「ThirdPersonUserControl」スクリプトを付けると、他に必要なコンポーネントが全て追加されます。
カメラはスタンダードアセットの「FreeLookCameraRig」を使います。
デフォルトでは、キーボードのキー入力でキャラが回転し、マウスの横移動でカメラのみが回転します。
これを、マウスの横移動でキャラを回転させて、カメラはキャラの回転に合わせるようにします。
キャラクターは常にカメラに背を向けていて、横の移動キーを入力するとキャラは前を向いたまま蟹のように横へ移動し、後ろに移動するとバックします。
そのようにスクリプトを変更するのは簡単ですが、前後左右とななめの8方向へ走るアニメーションなどを新しく作らないといけません。
前後に走るアニメーションを作って、斜め方向へは、ルートのボーンの角度を45度変えて、横方向へも移動させました。
真横へ進むアニメーションも作ります。
全てのアニメーションで、顔は常に前を向いています。
ルートのボーンには上下の移動も含まれています。
地面を蹴ってジャンプしているときは体全体が上に移動し、着地すると体が沈みます。
キャラの移動はルートモーションを使うので、インポート設定のRigタブで、Root nodeを設定します。
また、AnimationタブでLoop Timeにチェックを入れて、アニメーションをループさせるようにします。
Root Transform RotationのBake Into Poseのチェックを入れて、Based UponをOriginalにしないと、ルートの回転が反映されないようです。
また、Root Transform Position(Y)も同様に設定しないと、ルートの上下の動きがなくなって、歩くとすり足のようになります。
そして、これらのアニメーションをアニメーターコントローラーのブレンドツリーに設定します。
Blend Typeを2D Freeform Cartesianにして、(0, 0)に仁王立ちのアニメーションをいれて、それ以外のアニメーションは走る方向と同じ方へ等間隔に配置しました。
例えば、まっすぐ前に走るアニメーションは(0, 1)の位置に、右斜め後ろへバックするアニメーションは(1, -1)の位置に設定します。
これで冒頭のGif画像のような動きに変更できました。
フリールックカメラの初期の位置や回転を変える
FreeLookCameraRigにはメインカメラとピボットが含まれています。
FreeLookCameraRigが横方向にピボットが縦方向に回転します。
カメラの初期位置を変えるにはこのピボットの位置を変えます。
FreeLookCameraRigやメインカメラの位置はプレイボタンを押すとスクリプトで変更されてしまいます。
また、回転はFreeLookCameraRigかメインカメラのRotationで変更できます。FreeLookCameraRigの回転はプレイボタンを押すとスクリプトで0に変わってしまいますが、ピボットの縦回転以外のローカルの回転にピボットの初期状態のワールドの回転が使われるので、そこへ保存されるようになっているようです。
キャラが少し右寄りに映るようにしました。