Unityではカメラのズームを簡単に行えるということを最近知りました。この記事ではそのやり方を説明します。
今回紹介する方法を使うと、望遠鏡やスナイパーライフルのようにカメラをズームインする演出を手軽に作れるので便利です(※もちろんズームインだけでなくズームアウトもできます)。
カメラの「FOV(Field Of View)」を操作する
では早速ズームのやり方についてですが、特に難しいことはなくカメラコンポーネントの「有効視野(FOV、Field Of View)」という項目の値を変更するだけです。値を小さくするとズームイン、大きくするとズームアウトします。
ちなみに有効視野とは何か?という話については公式マニュアルの「視錐台を理解する」や「カメラからの距離で求める錐台のサイズ」を参照してください。
滑らかにズームするスクリプト
ズームのやり方が分かったところで、できればそれをスクリプトから制御したいものです。さらに普通に値を代入しただけでは一瞬でズームしてしまうので、徐々にズームする感じを出したいという場合が多いですよね。
そこでここでは「DOTween」というTween系アセットを使用して、滑らかにズームするようなスクリプトを紹介します。
まず、アセットストアからDOTweenをダウンロードしてインポートしたら、処理を書くスクリプトの最初のあたりに
using DG.Tweening;
を追加してください。
そうしたら次のスクリプトを適当な場所に書いてください。
float defaultFov = Camera.main.fieldOfView; float zoom = 6; float waitTime = 0.5f; DOTween.To(() => Camera.main.fieldOfView, fov => Camera.main.fieldOfView = fov, defaultFov / zoom, waitTime);
これで冒頭の動画のような滑らかなズームを実現することができます。
スクリプトの解説
DOTween.To()メソッドを使って値を滑らかに変化させています。このメソッドの引数にはラムダ式を使っているので、少し分かりづらいと思いますが
- 第1引数:変化させる値(ここではカメラの有効視野)
- 第2引数:カメラの有効視野に一時変数fovを代入
- 第3引数:最終的な値(標準の有効視野を倍率で割った値)
- 第4引数:変化にかける時間
という風になっています。
DOTween.To()メソッドは値を滑らかに変化させたいときにとても便利なので、覚えておいて損はありません。