[Unity][攝像機視角]多個攝像機之間切換

 

 

有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);
    }
}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章