有2種方法來切換不同的攝像機,
先通過數組來存放已經在場景設置好的攝像機
1.改變攝像機的gameobject的active
2.改變攝像機的depth
Camera的Depth影響,攝像機之間切換的排序。都是0,或者是按照順序0,1,2,3,4,5...進行排列。
如果Depth爲-1則,Depth爲0的攝像機會排在其前面。
兩種查找方式,查找場景中所有帶有Camera組件的物體,
1.可以通過判斷其transform.tag的TAG的字符串來 找到所需的攝像機。
前提是得設置所有所需的攝像機的物體的TAG。
2.通過把所有攝像機放入一個空的物體中,如下圖所示的空物體Cameras,找到這個空物體Cameras,就能遍歷其子物體,找到攝像機。(下圖所示的方法)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_Cameras : MonoBehaviour {
/// <summary>
/// 子物體爲 攝像機的父物體
/// </summary>
public Transform cameras_trans;
/// <summary>
///
/// </summary>
public List<Transform> cameras_trans_list= new List<Transform>();
/// <summary>
///
/// </summary>
public Camera[] cameras_trans_list1;
/// <summary>
///
/// </summary>
public Camera[] cameras_trans_list2;
/// <summary>
/// 索引
/// </summary>
public int index = -1;
/// <summary>
/// 攝像機的長度
/// </summary>
public int cameras_length;
/// <summary>
/// 上一個攝像機
/// </summary>
public Camera upCamera = null;
// Use this for initialization
void Start () {
index = -1;
findCameras();
}
/// <summary>
///
/// </summary>
private void findCameras()
{
cameras_trans_list1 = Resources.FindObjectsOfTypeAll(typeof(Camera)) as Camera[];
//GameObject.FindObjectsOfTypeAll(typeof(Camera));//已經棄用
if (cameras_trans != null)
{
cameras_trans_list2 = cameras_trans.GetComponentsInChildren<Camera>();//遍歷所有的子物體
cameras_length = cameras_trans_list2.Length;
}
else
{
cameras_length = cameras_trans_list1.Length;
}
}
/// <summary>
/// 上一個攝像機
/// </summary>
public void UpCamera()
{
if (index == -1)
{
index = 0;
}
if (index > 0
&& index <= cameras_length)
{
index = index - 1;
}
else if (index ==0)
{
index = cameras_length-1;
}
if (cameras_trans_list2!=null
&& cameras_trans_list2.Length >0)
{
for (int i=0; i< cameras_trans_list2.Length; i++)
{
//cameras_trans_list2[i].gameObject.SetActive(false);
cameras_trans_list2[i].depth = -1;
}
//cameras_trans_list2[index].gameObject.SetActive(true);
cameras_trans_list2[index].depth = 0;
}
}
/// <summary>
/// 下一個攝像機
/// </summary>
public void NextCamera()
{
if (index == -1
&& cameras_trans_list2 != null
&& cameras_trans_list2.Length > 0
&& upCamera == null)
{
index = 0;
for (int i = 0; i < cameras_trans_list2.Length; i++)
{
cameras_trans_list2[i].gameObject.SetActive(false);
}
cameras_trans_list2[index].gameObject.SetActive(true);
}
else
{
upCamera = cameras_trans_list2[index];
upCamera.gameObject.SetActive(false);
}
/*
if (cameras_trans_list2 != null
&& cameras_trans_list2.Length > 0
&& upCamera == null
)
{
for (int i = 0; i < cameras_trans_list2.Length; i++)
{
cameras_trans_list2[i].gameObject.SetActive(false);
}
}
else if (cameras_trans_list2 != null
&& cameras_trans_list2.Length > 0
&& upCamera != null
&& upCamera.gameObject.activeSelf == true
)
{
for (int i = 0; i < cameras_trans_list2.Length; i++)
{
cameras_trans_list2[i].gameObject.SetActive(false);
}
}*/
if (cameras_trans_list2 != null
&& cameras_trans_list2.Length > 0
&& upCamera != null
&& upCamera.gameObject.activeSelf == true
)
{
upCamera.gameObject.SetActive(false);
}
if (index >= 0
&& index < (cameras_length - 1))
{
index = index + 1;
}
else if (index == (cameras_length - 1))
{
index = 0;
}
cameras_trans_list2[index].gameObject.SetActive(true);
}
}