別の記事で、ズームを実装する方法を紹介しました。
今回はそのズームを滑らかに実装する方法をCinemachineを使って記述していこうと思います。
滑らかにするプログラムは普通のカメラでも使えるので是非参考にしてみてください。
準備
Cinemachineをインストールしていない方はPackage Managerからインストールをしてください。
インストールの仕方はこちらの記事を参考にしてください↓
カメラを制御するオブジェクトを生成し、そこにスクリプトをアタッチしときます。
ヒエラルキーウィンドウで右クリック>Cinemachine>VitualCameraでオブジェクトの中にVitualCameraを入れましょう。
準備は以上です。
スクリプト
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;
public class CameraZoomer : MonoBehaviour
{
[SerializeField] CinemachineVirtualCamera cam;
[SerializeField] float ZoomedInValue = 20; //ズームインの値
[SerializeField] float ZoomedOutValue = 60; //ズームアウトの値
[SerializeField] float zoomTime = 0.1f; //ズームの速度
private float currentLOS;
private float outLos;
private float currentVelocity = 0;
bool isZoomed = false;
void Start()
{
outLos = ZoomedOutValue;
}
void Update()
{
currentLOS = Mathf.SmoothDamp(cam.m_Lens.FieldOfView, outLos, ref currentVelocity, zoomTime);
cam.m_Lens.FieldOfView = currentLOS;
if (Input.GetMouseButtonDown(1))
{
if (isZoomed == false)
{
isZoomed = true;
ZoomIn();
}
else
{
isZoomed = false;
ZoomOut();
}
}
}
//ズームイン
private void ZoomIn()
{
outLos = ZoomedInValue;
}
//ズームアウト
private void ZoomOut()
{
outLos = ZoomedOutValue;
}
}
エディターの方でスクリプトを見るとカメラをアタッチする項目があるのでそこにVirtual Cameraを入れましょう。
他にもズームインの値やズームアウトの値、ズームの速度も変えられますので、納得のいく値に合変えてみましょう。
これで実行をしてみると。
スムーズにカメラがズームできるようになりました!
プログラムの重要ポイント
このプログラムの重要ポイントはここ
currentLOS = Mathf.SmoothDamp(cam.m_Lens.FieldOfView, outLos, ref currentVelocity, zoomTime);
cam.m_Lens.FieldOfView = currentLOS;
Mathf.SmoothDamp(現在値, 目標値,現在速度を格納する変数, 目標値までの変化時間);
というような引数を入れて、Virtual CameraのFieldOfViewに反映しています。
まとめ
いかがでしたでしょうか?
SmoothDampは何かをスムーズにするのにすごく使える関数ですのでぜひ活用をしてください。
コメント