C Sharp Unity

【Unity】キャラクター操作その7 – ジャンプ時にカメラの向きを変える

投稿日:

概要

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); 

これらを組み合わせて、ジャンプしている間だけ動かすというようなスクリプトが作って動かしたものが最初のアニメーションになります。

-C Sharp, Unity

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

【Unity】キャラクター操作その4 –  レーザーソードを持たせてON/OFFする

Contents1 概要2 環境3 Step1 : レーザーソードの調達4 Step2 : レーザーソードを持たせる5 Step3 : レーザーソードをON/OFFする6 まとめ 概要 前回はRobo …

【Unity】ゲームパッド(logicool F310)でキャラクターを操作する

Contents1 概要2 環境3 使用したゲームパッドについて4 Step1 : PCへのF310の接続5 Step2 : UnityのInput Managerの設定5.1 「走る」の設定5.2 …

UnityでNon-convex MeshCollider with non-kinematic Rigidbody is no longer supported since Unity 5.が出た時の対処法

Contents1 概要2 環境3 エラー内容4 対処法15 対処法2 概要 UnityでAsset Storeからフリーの武器をダウンロードして使用していたら、以下のエラーがでたのでその対処方法につ …

【Unity】 error CS0029: Cannot implicitly convert type ‘UnityEngine.Quaternion’ to ‘UnityEngine.Vector3’が出た時の対処法

Contents1 概要2 環境3 エラーが発生したコード4 原因5 対処法 概要 UnityのC#開発においてtransformオブジェクトをスクリプトで触っていたら、以下のエラーが発生したため、そ …

【Unity】ThirdPersonUserControlの方向転換動作おかしい時の対処

Contents1 事象2 調査3 対処 事象 Standard AssetsのThirdPersonUserControlを使用してEthanを動かすとき、デフォルトの正しい動きは↑↓キーで前進後退 …

言語切り替え

カテゴリー