You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();
        }
    }
}

关键逻辑说明

  1. 初始状态控制

    • 启动时遍历所有相机,统一设置为禁用状态,满足“启动时无激活相机”的需求。
    • 用currentCameraIndex = -1标记当前无激活相机,避免切换时出现空引用错误。
  2. 循环切换逻辑

    • 切换时先检查是否有激活的相机,若有则先禁用,再更新索引。
    • 索引超出范围时自动循环:向上切换到最后一台后,再按上键回到第一台;向下切换到第一台后,再按下键回到最后一台。
  3. 灵活性优化

    • 支持在Inspector面板手动拖入需要切换的相机,避免自动检索到无关相机。
    • 若不需要自动检索,可删除if (cameras.Count == 0)块的逻辑,仅保留禁用相机的代码。

内容的提问来源于stack exchange,提问作者Abraham Jaleel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:10:24