您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
65 行
1.7 KiB
65 行
1.7 KiB
using System.Collections.Generic;
|
|
using Unity.Sample.Core;
|
|
using UnityEngine;
|
|
|
|
public class CameraStack
|
|
{
|
|
public delegate void CameraEnabledChanged(Camera camera, bool enabled);
|
|
|
|
public CameraEnabledChanged OnCameraEnabledChanged;
|
|
|
|
List<Camera> m_CameraStack = new List<Camera>();
|
|
|
|
public Camera TopCamera()
|
|
{
|
|
var c = m_CameraStack.Count;
|
|
return c == 0 ? null : m_CameraStack[c - 1];
|
|
}
|
|
|
|
public void PushCamera(Camera cam)
|
|
{
|
|
if (m_CameraStack.Count > 0)
|
|
SetCameraEnabled(m_CameraStack[m_CameraStack.Count - 1], false);
|
|
m_CameraStack.Add(cam);
|
|
SetCameraEnabled(cam, true);
|
|
}
|
|
|
|
public void PopCamera(Camera cam)
|
|
{
|
|
GameDebug.Assert(m_CameraStack.Count > 1, "Trying to pop last camera off stack!");
|
|
GameDebug.Assert(cam == m_CameraStack[m_CameraStack.Count - 1]);
|
|
if (cam != null)
|
|
SetCameraEnabled(cam, false);
|
|
m_CameraStack.RemoveAt(m_CameraStack.Count - 1);
|
|
SetCameraEnabled(m_CameraStack[m_CameraStack.Count - 1], true);
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
// Make sure all cameras are in stack
|
|
foreach (var camera in Camera.allCameras)
|
|
{
|
|
if (m_CameraStack.Contains(camera))
|
|
continue;
|
|
|
|
SetCameraEnabled(camera, false);
|
|
m_CameraStack.Insert(0,camera);
|
|
}
|
|
|
|
// Verify if camera was somehow destroyed and pop it
|
|
while (m_CameraStack.Count > 1 && m_CameraStack[m_CameraStack.Count - 1] == null)
|
|
{
|
|
PopCamera(null);
|
|
}
|
|
}
|
|
|
|
void SetCameraEnabled(Camera cam, bool enabled)
|
|
{
|
|
cam.enabled = enabled;
|
|
|
|
if (OnCameraEnabledChanged != null)
|
|
OnCameraEnabledChanged(cam, enabled);
|
|
}
|
|
|
|
|
|
}
|