【Unity】カメラをズームさせる方法

カメラのズーム(スナイパーライフル) ゲーム制作メモ
スポンサーリンク

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()メソッドは値を滑らかに変化させたいときにとても便利なので、覚えておいて損はありません。