close

若要切換攝影機,千萬別把切換攝影機的程式碼拖曳到要切換的攝影機上面!(所以我從GameObject → Create Empty 新增了一個空物件用來當作放切換攝影機程式碼的存放位置,且命名為control)

如圖,我新增了兩個攝影機和兩個Empty GameObject (GameObject內再放了兩個Cube,且一個是上下、一個左右,用以區分當前是第幾個攝影機)

 

 

新增一個C# Script,我命名為control (也就是上圖的那個C#檔案),然後寫了以下的程式碼


 

 

using UnityEngine;
using System.Collections;

public class control : MonoBehaviour
{
    public GameObject cam1, cam2; //兩個不同的攝影機
    public GameObject obj1, obj2; //兩個不同的GameObject

    /* 放在Awake內,在物件執行之前就先封鎖住,避免物件的出現,直到使用者切換攝影機後再創造該物件,若是放在Start內則會造成全部的物件都已經產生且初始化後再封鎖住。 */
    void Awake ()
    {

        //預設先開啟第一部攝影機


        //一定要先暫停不使用的攝影機後,再開啟要使用的攝影機!
        cam2.SetActive(false);
        cam1.SetActive(true);

        //沒有要顯示出來的物件則先暫時關閉,同時開啟要顯示的物件,避免背景執行浪費效能。若多部攝影機都拍著同個物件,則不需要關閉該物件,只需關閉攝影機即可

        //被關閉的物件和其子物件都會被隱藏(其身上的script都會一起被暫停)
        obj2.SetActive(false);
        obj1.SetActive(true);
    }
   
    void Update ()
    {
        if (Input.GetKey("z") == true)
        {
            //若是按下鍵盤的z則切換成第二部攝影機
            cam1.SetActive(false);
            obj1.SetActive(false);
            cam2.SetActive(true);
            obj2.SetActive(true);
        }
        else if (Input.GetKey("x") == true)
        {
            //若是按下鍵盤的x則切換成第一部攝影機
            cam2.SetActive(false);
            obj2.SetActive(false);
            cam1.SetActive(true);
            obj1.SetActive(true);
        }
    }
}


然後將該程式檔拖曳到Hierarchy的control這個空物件

 

之後將Camera1、Camera2、GameObject1、GameObject2分別拉入Cam1、Cam2、obj1、obj2內

 

之後就可以直接執行試試看了!

按下z切換到第二部攝影機,以及按下x切換到第一部攝影機

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Yang 的頭像
    Yang

    Yang的部落格(轉貼文章請註記來源)

    Yang 發表在 痞客邦 留言(0) 人氣()