CinemachineCameraを使ったカメラ制御とズーム機能(InputSystem版:キー操作)
概要
この資料では、Unity の新しい Input System と最新版の Cinemachine(名前空間が Unity.Cinemachine
)を活用し、カメラの Field of View (FOV) をポーリングによってズームイン/ズームアウトする実装方法について解説します。
具体的には、’Z’ キーでズームイン、’X’ キーでズームアウトする動作を実現します。
必要な環境
- Unity: 2019.1 以降(Input System パッケージがインストール済み)
- Cinemachine: 最新版(名前空間は
Unity.Cinemachine
を使用)
実装の流れ
- 名前空間の設定
UnityEngine.InputSystem
:新しい Input System を利用するために追加します。Unity.Cinemachine
:最新版の Cinemachine のクラスを使用するために追加します。
- カメラ型の選択
最新の Cinemachine では、CinemachineCamera
型を使用することでエラーなくコンパイルできます。 - ポーリングによる入力検出
Update()
メソッド内で、Keyboard.current
を使用してキー入力をポーリングします。
'Z’ キーが押されている場合はズームイン、’X’ キーが押されている場合はズームアウトの処理を行います。 - Mathf.Lerp による滑らかな FOV 変化
Mathf.Lerp
を利用し、現在の FOV から目標の FOV への遷移をスムーズに実現します。
なお、Time.deltaTime
を掛けることでフレームレート依存性を排除しています。
コード例
using UnityEngine;
using UnityEngine.InputSystem;
using Unity.Cinemachine;
public class CameraZoom : MonoBehaviour
{
public CinemachineCamera virtualCamera;
public float zoomInFOV = 30f; // ズームイン時のFOV値
public float zoomOutFOV = 60f; // ズームアウト時のFOV値
public float zoomSpeed = 10f; // ズームの速さ
void Update()
{
if (virtualCamera == null || Keyboard.current == null)
return;
// 'Z' キーが押されている場合はズームイン
if (Keyboard.current.zKey.isPressed)
{
virtualCamera.Lens.FieldOfView = Mathf.Lerp(
virtualCamera.Lens.FieldOfView,
zoomInFOV,
Time.deltaTime * zoomSpeed
);
}
// 'X' キーが押されている場合はズームアウト
else if (Keyboard.current.xKey.isPressed)
{
virtualCamera.Lens.FieldOfView = Mathf.Lerp(
virtualCamera.Lens.FieldOfView,
zoomOutFOV,
Time.deltaTime * zoomSpeed
);
}
}
}
- 名前空間の変更
最新の Cinemachine パッケージでは、従来のusing Cinemachine;
の代わりにusing Unity.Cinemachine;
を利用する必要があります。
これにより、CinemachineCamera
クラスなどが正しく参照され、コンパイルエラーが解消されます。 - Input System の利用
UnityEngine.InputSystem
を導入することで、Keyboard.current
を使い、毎フレームキー入力をポーリングして状態を取得できます。
この方法により、リアルタイムでのキー入力に応じた処理が可能になります。 - 滑らかな FOV 遷移
Mathf.Lerp
を用いて、現在の FOV 値から目標の FOV 値(ズームイン時はzoomInFOV
、ズームアウト時はzoomOutFOV
)への補間を行います。Time.deltaTime * zoomSpeed
により、フレームレートに依存しない滑らかなズーム効果が実現されます。 - エラーチェック
virtualCamera
やKeyboard.current
が null の場合は処理を中断することで、実行時のエラーを未然に防ぎます。
注意点
- プロジェクトにおいて、Input System を利用する際はプロジェクト設定で新しい Input System を有効にしてください。
- Cinemachine のバージョンによっては、使用する型(例:
CinemachineVirtualCamera
など)が異なる場合があります。
本コード例では、エラーなく動作するCinemachineCamera
を使用しています。
この資料を参考に、Unity プロジェクトに組み込むことで、最新の名前空間設定と型に対応したカメラのズーム制御が実現できます。
ディスカッション
コメント一覧
まだ、コメントがありません