Unityで3D脱出ゲーム

Unity 3D脱出ゲームの作り方その15:カメラのズームをする方法

2020年12月19日

Unityで作る3D脱出ゲームの作り方を紹介している記事その15です。

僕が所属しているオンラインサロンの
先生である嶋津さんが作成された動画を
見ながら勉強した内容について、

3D脱出ゲームの作り方

としてまとめている記事になります。

その15となるこの記事では、

カメラのズームをする方法

についてお伝えしています。

参考となる動画はこちらです。

【Unity3D】脱出ゲームの作り方 # 15カメラのズーム

Udemyの場合は

セクション8

65.ズームカメラの実装

66.戻るパネルの実装

についての内容です。

スポンサーリンク

この動画で勉強すること

▶︎カメラのズームを実装して視点の変更をする。

目標1

ズームカメラ用のC#スクリプトを作成する。

=>ズームカメラの処理を書くスクリプトを作る。(CameraZoomObjスクリプト)

=>クリック判定をする関数を書く。

目標2

ズームをする場所にクリック判定をつける。(今回は宝箱)

=>宝箱(Chest)にCameraZoomObjスクリプトをつける。

=>宝箱(Chest)にイベントトリガーをつけて設定する。

=>宝箱(Chest)にコライダーをつける。(Box Collider)

目標3

ズーム用のカメラを作る。

=>宝箱(Chest)の子要素にcameraを作る。

=>cameraの位置調整などを行う。

=>ズームカメラの設定を行う。

目標4

宝箱をクリックした時にズームカメラへ切り替える処理を作る。

=>CameraManagerスクリプトにコードを書く。

=>CameraZoomObjスクリプトの編集をする。

目標5

ズーム状態から元の位置に戻る処理を作る。

=>元の位置に戻る時にクリックするPanelを作る。(BackPanel)

=>CameraManagerスクリプトにコードを書く。

CameraZoomObjスクリプトのコード

カメラのズームを行うために作成した
CameraZoomObjのコードは
以下となります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraZoomObj : MonoBehaviour
{
    [SerializeField] Camera zoomCamera = default;
    // クリックしたら、用意してあるカメラに切り替える
    public void OnClickThis()
    {
        Debug.Log("カメラ切り替え");
        CameraManager.instance.SetZoomCamera(zoomCamera);
    }
}

CameraManagerスクリプトのコード

カメラのズーム処理を行うために
今回編集を行ったCameraManagerの
コードは以下となります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraManager : MonoBehaviour
{


    // カメラの切り替え
    // どこにどのカメラを有効にするのか
    // どこに
    // ・mainの全体を回転するカメラ
    // ・ズームしたときのカメラ

    Camera currentCamera;
    Camera mainCamera;

    // 全体を回転するカメラのポジションを作成
    [SerializeField] Transform[] mainCameraTransforms = default;
    int currentMainPosition = default;


    //どのファイルからでも関数が実行できるようにする
    public static CameraManager instance;
    private void Awake()
    {
        instance = this;
    }


    private void Start()
    {
        mainCamera = Camera.main;
        currentCamera = Camera.main;
        currentMainPosition = 0;
        currentCamera.transform.position = mainCameraTransforms[currentMainPosition].position;
        currentCamera.transform.rotation = mainCameraTransforms[currentMainPosition].rotation;

    }

    public void TurnLeft()
    {
        currentMainPosition--;
        if(currentMainPosition < 0)
        {
            currentMainPosition = mainCameraTransforms.Length-1;
        }
        currentCamera.transform.position = mainCameraTransforms[currentMainPosition].position;
        currentCamera.transform.rotation = mainCameraTransforms[currentMainPosition].rotation;
    }

    public void TurnRight()
    {
        currentMainPosition++;
        if(currentMainPosition >= mainCameraTransforms.Length)
        {
            currentMainPosition = 0;
        }
        currentCamera.transform.position = mainCameraTransforms[currentMainPosition].position;
        currentCamera.transform.rotation = mainCameraTransforms[currentMainPosition].rotation;
    }

    public void SetZoomCamera(Camera camera)
    {
        currentCamera.gameObject.SetActive(false);
        camera.gameObject.SetActive(true);
        currentCamera = camera;
    }

    public void OnBackButton()
    {
        mainCamera.gameObject.SetActive(true);
        currentCamera.gameObject.SetActive(false);
        currentCamera = mainCamera;
    }
}

カメラのズームで勉強したことのまとめ

3D脱出ゲームの作り方その15
「カメラのズーム」で勉強した
内容についてのまとめです。

カメラのズームを行うには、
 まずズームカメラ用の
 C#スクリプトを作成します。

次にズームをする場所に
 クリック判定を作り、
 ズーム用のカメラを作成します。

そしてクリックした時に
 ズームカメラに切り替える処理を
 C#スクリプトに書きます。

最後にズーム状態から元の位置へ
 戻る処理をスクリプトに書きます。

今回の内容を実践してPlayボタンで
実行すると、

宝箱をクリックした時に
ズームした視点へカメラを
切り替えられるようになります。

以上で「カメラのズーム」の
目標は達成です!

スポンサーリンク

-Unityで3D脱出ゲーム