unity简单的摄像机管理器

在一些项目中可能我们的一个摄像机是不够我们使用的
比如在一些时候 我们想切换一下视角 做出更加震撼的效果
我们这时候要把早早调整好位置等参数的摄像机工作起来

但是有一个问题在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("直角路摄像机");
        }
    }

这里边所有的东西都是我经过测试的 没什么问题
希望我所写的对你有帮助
主页有我的联系方式 如果有问题或者是合作可以联系我(知无不答)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值