Unity小技 カメラの目の前にCanvasを出現させる

Unity

説明

今回は、「A」ボタンを押したときに、CanvasをON, OFF します。(表示・非表示)
ONの場合に、Canvasの位置をカメラの目の前(カメラを基準として、一定の位置)にします。
(※常にカメラに追従するわけではありません。追従したい場合は。MainCameraの子オブジェクトにCanvasを設置すればOKです。)

環境

Unity 20194.8f1

実装

①. シーンにCanvasを設置し、Render Modeを「World Space」にする

②. Canvasの子オブジェクトに好きなように、PanelやTextを用意する。Canvasを非表示の状態から始めたいので、Canvasのゲームオブジェクトをはずす。

③. CanvasManagerという空のオブジェクトをシーンに配置し、以下のスクリプトをAdd Componentする

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

public class CanvasManager : MonoBehaviour
{
    public GameObject Camera;
    public GameObject Canvas;
    private bool pushFlag = false;  // ボタン押しすぎない用
    public bool check = true;       // 条件分岐用のbool変数

    // Update is called once per frame
    void Update()
    {
        // Aボタンで開く
        if (Input.GetKey(KeyCode.A))
        {
            if (pushFlag == false)
            {
                pushFlag = true;
                if (!check)
                {
                    // 非表示
                    Canvas.SetActive(false);
                    check = true;
                }
                else
                {
                    // 表示
                    Canvas.SetActive(true);
                    if(Camera)
                    {
                        Canvas.transform.position = Camera.transform.position + Camera.transform.forward * 3.0f;
                        Quaternion CameraRot = Camera.transform.rotation;
                        CameraRot.x = 0f;   // Canvasが斜めにならないように調整
                        CameraRot.z = 0f;   // Canvasが斜めにならないように調整
                        Canvas.transform.rotation = CameraRot;
                        check = false;
                    }
                }
                
            }
        } else {
            pushFlag = false;
        }
    }
}

④. CanvasManagerのインスペクターから、上記のスクリプトに、「Main Camera」と「Canvas」を設置します。

実行

こんな感じです。わかりづらいですが、下記の画像の「Camera Preview」を見ていただければ、どこに移動しても、まったく同じように表示されているのがわかります。

※Y軸回転にも対応しております。

コメント

タイトルとURLをコピーしました