【Unity】カメラを多段階にズームする方法

unity

こんにちは、のっくんです。

今日は脱出ゲーム等でカメラを複数回ズームする方法をご紹介します。

実装イメージとしては以下の通りです。

前の記事では一度だけズームする方法をご紹介したのですが、今回は拡張して複数回ズームするようにしてみました。

仕組みとしては、

  • コライダ付きの空オブジェクト(クリック用オブジェクト)を配置
  • Aがクリックされたらカメラを切り替える

となっています。

順番に解説します。

クリック用オブジェクトを作成する

ユーザがクリックするためのクリック用オブジェクトを作成します。

クリック用オブジェクトはユーザがクリックする場所に設置します。

クリック用オブジェクトにはBoxコライダ、スクリプト、EventTriggerをアタッチします。

using UnityEngine;

public class ZoomCameraObj : MonoBehaviour
{
    [SerializeField] Camera zoomCamera;

    public void onClickThis()
    {
        CameraManager.instance.setZoomCamera(zoomCamera);
    }

}

スクリプトにはズーム用のカメラを追加します。

ヒエラルキービューワの+ボタンでCameraを選び追加、適切な位置に配置します。

配置したズームカメラを上記のスクリプトにセットします。

カメラのズーム

クリック用オブジェクトがクリックされたらズーム処理を実行します。

具体的には、

  1. 現在のカメラをオフにする
  2. ズーム用カメラをオンにする

処理を行います。

元に戻るときのために現状使用しているカメラを配列に保存します。

    Camera[] cameras;
    int index=0;    
   
    public void setZoomCamera(Camera camera,GameObject obj)
    {
        //現在のカメラをオフに
        cameras[index].gameObject.SetActive(false);

        index++;

        //遷移先のカメラを保存してオンに
        camera.gameObject.SetActive(true);
        cameras[index] = camera;

    }

戻る

戻るボタンが押されたときの処理です。

  1. 現在のカメラをオフにする
  2. 1つ前のカメラをオンにする
    public void backMainCamera()
    {
        //現在のカメラをオフに
        cameras[index].gameObject.SetActive(false);

        index--;

        //1つ前のカメラをオンに
        cameras[index].gameObject.SetActive(true);
    }

レイヤー分けをする

cameraにアタッチするPhysicsRaycasterではレイヤーを指定することができます。

これを利用してズーム時にだけクリックできるオブジェクトの作成が可能です。

おわり。