Unityでゲームを作っているとカメラを滑らかにズームさせたくなることがあります。この記事ではそのやり方を説明します。
今回紹介する方法を使えば、下のGIFのように望遠鏡やスナイパーライフルのようにカメラをズームインする演出を手軽に作れるので便利です(※もちろんズームインだけでなくズームアウトもできます)。
単純なズーム:カメラの「FOV」の値を操作する
では早速ズームの基本的なやり方についてですが、特に難しいことはなくカメラコンポーネントの「有効視野(FOV、Field Of View)」という項目の値を変更するだけです。値を小さくするとズームイン、大きくするとズームアウトします。
ちなみに有効視野とは何か?という話については公式マニュアルの「視錐台を理解する」や「カメラからの距離で求める錐台のサイズ」を参照してください。
滑らかにズームさせるためのC#スクリプト
さてズームのやり方が分かったところで、できればそれをC#スクリプトから制御したいものです。さらに普通に値を代入しただけでは一瞬でズームしてしまうので、徐々にズームする感じを出したいという場合が多いですよね。
そこでここでは「DOTween」というTween系アセットを使用して、滑らかにズームするようなC#スクリプトを紹介します。
まず、アセットストアからDOTweenをダウンロードしてインポートしましょう。そうしたら適当なC#スクリプトを新規作成し、次の「ZoomCamera」関数を書いてください。
using UnityEngine; using DG.Tweening; public class CameraController : MonoBehaviour { public void ZoomCamera(Camera camera, float zoom, float duration) { float defaultFov = camera.fieldOfView; DOTween.To(() => camera.fieldOfView, fov => camera.fieldOfView = fov, defaultFov / zoom, duration); } }
これでこの関数を呼び出せば冒頭のGIFのようにカメラを滑らかにズームさせることができます。
C#スクリプトの解説
なお上記のZoomCamera関数では、「DOTween.To」という関数を使ってFOVの値を滑らかに変化させています。この関数の引数にはラムダ式を使っているので少し分かりづらいと思いますが
- 第1引数:変化させる値(ここではカメラの有効視野)
- 第2引数:カメラの有効視野に一時変数fovを代入
- 第3引数:最終的な値(標準の有効視野を倍率で割った値)
- 第4引数:変化にかける時間
という風になっています。
DOTween.To関数は何らかの値を滑らかに変化させたいときにとても便利なので、覚えておいて損はありません。
おわりに
以上、簡単ではありますがUnityでカメラを滑らかにズームさせる方法について説明しました。特にFPS等の3Dゲームで頻繁に使う演出だと思うので、ぜひ上記を参考にしていただきゲーム開発にお役立ていただければ幸いです。