[Unity][摄像机视角]多个摄像机之间切换

有2种方法来切换不同的摄像机,

先通过数组来存放已经在场景设置好的摄像机

1.改变摄像机的gameobject的active

2.改变摄像机的depth


Camera的Depth影响,摄像机之间切换的排序。都是0,或者是按照顺序0,1,2,3,4,5...进行排列。

扫描二维码关注公众号,回复: 11381257 查看本文章

如果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);
    }
}

猜你喜欢

转载自blog.csdn.net/BuladeMian/article/details/105196035