Unity相机管理:如何仅启用当前使用相机,禁用其余相机
相机循环切换实现方案
需求说明
实现一组相机通过上下方向键循环切换:游戏启动时所有相机处于禁用状态,切换到某台相机时才启用该相机;切换至下一台时,自动禁用前一台,循环往复。
修正后的完整代码
using UnityEngine; using System.Collections.Generic; public class CameraManager : MonoBehaviour { [SerializeField] private List<Camera> cameras = new List<Camera>(); private int currentCameraIndex = -1; // 初始为-1,标记无激活相机 private void Awake() { // 若Inspector未手动添加相机,自动检索场景内所有相机 if (cameras.Count == 0) { cameras.AddRange(FindObjectsOfType<Camera>()); } // 启动时禁用所有相机 foreach (var cam in cameras) { cam.enabled = false; } } private void NextCamera() { // 禁用当前激活的相机(如果有的话) if (currentCameraIndex != -1) { cameras[currentCameraIndex].enabled = false; } // 索引自增,超出范围则回到开头 currentCameraIndex++; if (currentCameraIndex >= cameras.Count) { currentCameraIndex = 0; } // 启用新相机 cameras[currentCameraIndex].enabled = true; } private void PreviousCamera() { // 禁用当前激活的相机(如果有的话) if (currentCameraIndex != -1) { cameras[currentCameraIndex].enabled = false; } // 索引自减,小于0则回到末尾 currentCameraIndex--; if (currentCameraIndex < 0) { currentCameraIndex = cameras.Count - 1; } // 启用新相机 cameras[currentCameraIndex].enabled = true; } private void Update() { // 上方向键切换到下一台相机 if (Input.GetKeyUp(KeyCode.UpArrow)) { NextCamera(); } // 下方向键切换到上一台相机 if (Input.GetKeyUp(KeyCode.DownArrow)) { PreviousCamera(); } } }
关键逻辑说明
初始状态控制
- 启动时遍历所有相机,统一设置为禁用状态,满足“启动时无激活相机”的需求。
- 用
currentCameraIndex = -1标记当前无激活相机,避免切换时出现空引用错误。
循环切换逻辑
- 切换时先检查是否有激活的相机,若有则先禁用,再更新索引。
- 索引超出范围时自动循环:向上切换到最后一台后,再按上键回到第一台;向下切换到第一台后,再按下键回到最后一台。
灵活性优化
- 支持在Inspector面板手动拖入需要切换的相机,避免自动检索到无关相机。
- 若不需要自动检索,可删除
if (cameras.Count == 0)块的逻辑,仅保留禁用相机的代码。
内容的提问来源于stack exchange,提问作者Abraham Jaleel
相关产品推荐
相关产品推荐

