若要切換攝影機,千萬別把切換攝影機的程式碼拖曳到要切換的攝影機上面!(所以我從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切換到第一部攝影機