【Unity】キャラクター操作 – ジャンプ時にカメラの向きを変える
概要
Unityでキャラクターをジャンプさせたときに、カメラの向きが水平のままだと下の状況がみえなくていまいち迫力に欠けます。
そのため、ジャンプ中にカメラのアングルを少し下向きに変え、ジャンプ中に地面が視界に入るようにする方法についてメモします。
完成イメージ
Before

After

カメラの制御方法
上記のようにカメラの姿勢を制御するにあたり、以下の3つを行っています。
- カメラオブジェクトの初期姿勢の取得
- ジャンプ中に小刻みに目標角度まで変更
- 着地後に初期姿勢に戻す
カメラオブジェクトの初期姿勢の取得
まずは一つ目のカメラオブジェクトの姿勢の取得方法から説明します。
スクリプトの中でGameObjectとしてmainCameraを定義し、
public class CameraAngle : MonoBehaviour
{
public GameObject mainCamera;
Vector3 iniMainCamPos;
void Start()
{
iniMainCamRot = mainCamera.transform.localEulerAngles;
}
}
その上で、キャラクターのInspectorからスクリプトのMain Cameraのフィールドにキャラクターのmain cameraのオブジェクトをドラッグ&ドロップで設定しておきます。

これで初期角度の取得が可能です。
小刻みに目標角度まで制御
続いてカメラ姿勢の制御を実施していきます。「小刻みに」とかいているのは=滑らかにという意味です。突然カメラの姿勢が一気に変わると気持ち悪いので徐々に目標書くまで動かしていこうということです。
今回は目標角度を20度として説明していきます。
滑らかに姿勢を動かすメソッドとしてVector3.SmoothDampというのがありますので、こちらを使用していきます。こちらは引数に以下を取ることができます。
SmoothDamp(現在位置,目的位置,現在速度,(最大速度),(経過時間))
具体的な使用例としては以下となります。
currentMainCamRot = mainCamera.transform.localEulerAngles;
mainCamera.transform.localEulerAngles = Vector3.SmoothDamp(currentMainCamRot, new Vector3(20, 0, 0), ref velocityZero, 0.1f);
}
初期姿勢に戻す
覚えておいた初期位置を代入するだけですが初期位置に戻す際も滑らかに戻します。
currentMainCamRot = mainCamera.transform.localEulerAngles;
mainCamera.transform.localEulerAngles = Vector3.SmoothDamp(currentMainCamRot, iniMainCamRot, ref velocityZero, 0.1f);
これらを組み合わせて、ジャンプしている間だけ動かすというようなスクリプトが作って動かしたものが最初のアニメーションになります。
以上
Unityを一から学ぶのにおすすめの本はコチラ