在一些项目中可能我们的一个摄像机是不够我们使用的
比如在一些时候 我们想切换一下视角 做出更加震撼的效果
我们这时候要把早早调整好位置等参数的摄像机工作起来
但是有一个问题在unity中摄像机不能同时工作
就算场景中多个摄像机同时存在 game模式下只能出现一个摄像机的画面
所一我们用一个单独写的脚本来整体控制所有摄像机的想要控制的参数
以及我们单独写出一个方法 通过string来实时控制摄像机的出现和隐藏、
public class CameraManager : MonoBehaviour
{
[Serializable]
public class MyCamera
{
[Header ("摄像机名称")]
public string name;
[Header("摄像机是否显示")]
public bool isSetActive;
[Header("摄像机的广角设置(60为正常)")]
[Range(20,100)]
public float CameraFieldOfView=60;
}
public List<MyCamera> cameraList;//存储所有摄像机的信息
public List<Camera> cameras;
private int index = 0;
private Dictionary<string, Camera> cameraDic = new Dictionary<string, Camera>();
private static CameraManager instance;
public static CameraManager Instance { get => instance; set => instance = value; }
private void Awake()
{
instance = this;
}
private void Start()
{
//获得所有的camera组件(这个脚本挂在父物体上)
Camera[] cams = transform.GetComponentsInChildren<Camera>();
for(int i = 0; i < cameraList.Count; i++)
{
cams[i].enabled = cameraList[i].isSetActive;//同步类中的设置和camera的设置
cams[i].fieldOfView = cameraList[i].CameraFieldOfView;
cameraDic.Add(cameraList[i].name, cameras[i]);//添加到dic中
}
}
public void StartCamera(string name)
{
if (!cameraDic.ContainsKey(name))
{
Debug.LogError("不存在名叫" + name + "的摄像机");
}
else
{
foreach (var a in cameras)//先让所有的camera失活
{
a.enabled = false;
}
cameraDic[name].enabled = true;//在根据name让想要的摄像机重新获得活性
}
}
}
这个是不用做让一个摄像机停止工作的方法
因为在StartCamera中 我把出来要工作以外的其他都隐藏了
使用的时候 我们可以通过单例在其他的脚本调用
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
CameraManager.Instance . StartCamera("直角路摄像机");
}
}
这里边所有的东西都是我经过测试的 没什么问题
希望我所写的对你有帮助
主页有我的联系方式 如果有问题或者是合作可以联系我(知无不答)