Unity

【脱出ゲーム制作3】視点を左右に変更させる方法

オリジナルのボクセルを使って脱出ゲーム制作に挑戦!

カメラの位置を移動し視点を変更させる

今回は脱出ゲームには欠かせない、プレイヤーの視点を変更する機能を実装します。

UIを作成

押すことで視点を変更させるボタンを作成します。

左右のボタンを作成

まずは視点を左右に変更するためのボタンを作ります。

CanvasとPanelを作成

Hierarchy→UI→Panelを選択します。

CanvasとPanelが作成されました。

トランスフォームのLeftを変更し、画面の右側だけにPanelを表示させるようにします。

Ctrl+DでPanelを複製し、左側のPanelを作ります。
トランスフォームのRightを変更します。

名前を「CameraMoveCanvas」「RightPanel」「LeftPenel」に変更。

後々使うので、BackPanelも作成しておきます。
トランスフォームのTopを変更し下側に表示させます。

BackPanelを非表示にしておきます。

Panel3つを選択し、インスペクターから「Button」を追加します。

スクリプトの作成

ボタンを押した際に発動するスクリプトを作成します。

CameraManagerオブジェクトの作成

HierarchyにCreateEmptyを選びゲームオブジェクトを作成し、名前をCameraManagerに変更します。
さらにAssets内にスクリプトを作成し、名前をCameraManager.csにします。

オブジェクトのCameraManagerにスクリプトのCameraManager.csをドラッグし、アタッチさせます。

CameraManager.cs

using UnityEngine;

public class CameraManager : MonoBehaviour
{
    [SerializeField] Transform[] cameraPositions = default;
    int currentIndex = 0;

    void Start()
    {
        currentIndex = 0;
        SetCameraPosition(currentIndex);
    }

    public void TurnRight()
    {
        currentIndex ++;
        if (currentIndex >= cameraPositions.Length)
        {
            currentIndex = 0;
        }
        SetCameraPosition(currentIndex);
    }

    public void TurnLeft()
    {
        currentIndex--;
        if (currentIndex < 0)
        {
            currentIndex = cameraPositions.Length -1;
        }
        SetCameraPosition(currentIndex);
    }

    void SetCameraPosition(int index)
    {
        Camera.main.transform.position = cameraPositions[index].position;
        Camera.main.transform.rotation = cameraPositions[index].rotation;
    }
}

メソッドの説明

Startメソッドゲーム開始時に実行され、初期のカメラ位置を設定します。
currentIndex を 0 に初期化し、SetCameraPosition メソッドを呼び出して、配列の 0 番目のポジションを適用します。
TurnRightメソッドカメラを右方向に切り替えます。
currentIndex を 1 増やし、配列の範囲を超えた場合は 0 に戻ります(配列の先頭にループ)。その後、SetCameraPosition を呼び出して位置を更新します。
TurnLeftメソッドカメラを左方向に切り替えます。
currentIndex を 1 減らし、インデックスが 0 未満になった場合は配列の最後(cameraPositions.Length – 1)に戻ります。その後、SetCameraPosition を呼び出して位置を更新します。
SetCameraPositionメソッド現在のインデックス(currentIndex)に基づいて、カメラの位置と回転を設定します。
配列の指定された要素(cameraPositions[index])から位置(position)と回転(rotation)を取得し、Camera.main に適用します。

CameraPositionの作成

これから作成するCameraPositionの位置によって視点の位置や角度が決まります。

CameraPositionの親要素の作成

Hierarchyに新たにゲームオブジェクトを作成し、名前をCameraPositionに変更します。

CameraPositionの子要素を作成

CameraPositionの子要素にゲームオブジェクトを4つ作成します。

MainCameraのトランスフォームのPositionとRotationが0になってるのを確認。

Gameobjectの子要素にMainCameraを配置します。

OverlayMenuからワイプを表示させ、カメラの位置がわかりやすいようにします。

カメラの表示を確認しながら、Gameobjectのトランスフォームを動かし位置を決定します。

ドアを背にした視点(壁がない)

MainCameraを2番目のGameobjectの子要素に移動させます。

子要素にしたら、MainCameraのトランスフォームをリセットさせます。

2番目のGameobjectのトランスフォームを変更し右を向いた視点にします。

今度は右の木箱のある方向を向いた視点

同じように3番目,4番目のGameobjectのトランスフォームも変更します。

4つのGameobjectを変更したらMainCameraを元に戻します。

これでCameraPositionが4つ作成できました。

CameraManagerのCameraPositionの項目に4つのGameobjectをドラッグしアサインします。

メソッドを反映させる

RightPanelとLeftPanelのButtonそれぞれにCameraManagerドラッグし、アサインします。

RightPanelのボタンにTurnRightメソッドLeftPanelのボタンにはTurnLeftを設定します。

右のボタンを押したらCameraManagerのTurnRightメソッドが実行されるようになります。左のボタンを押したらTurnLeftメソッドが実行されます。

完成

プロジェクトを実行し確認。

ボタンをクリックすると視点が変わるようになりました。

まとめ

  • UIの左右のボタンを作成する
  • カメラポジションを作成し、映したい位置に配置する
  • CameraManagerでボタンを押した時にカメラのポジションが変わるようにする

※注意点
配列の上限を超えないように変数を調整する処理を行うようにする

とりあえず今回はここまで

参考にさせていただきました。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です