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

Unity使用同一按键关闭环境光后无法重新开启,如何实现单键控光

Unity单按键切换灯光功能实现方案

你的现有代码存在两个核心逻辑问题,导致无法实现切换效果:

  • 两个判断分支都监听同一次空格按下事件,第一个if条件触发后,else if分支永远不会执行
  • 灯光对象被设置为SetActive(false)后,挂载在该对象上的脚本也会停止运行,无法再接收后续的按键输入唤醒对象

你需要的单按键开关灯光需求完全可以实现,以下是可直接运行的实现方案:

方案1:控制灯光对象激活状态(脚本挂载在常驻活跃节点)

将脚本挂载在场景中永远不会被禁用的对象上(例如空的全局管理器对象),提前绑定要控制的灯光对象:

using UnityEngine;

public class LightToggle : MonoBehaviour
{
    // 在Inspector面板拖拽绑定目标平行光对象即可
    public Light targetLight;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // 直接取反当前激活状态,实现开关切换
            targetLight.gameObject.SetActive(!targetLight.gameObject.activeSelf);
        }
    }
}

方案2:脚本直接挂载在灯光对象上

不需要禁用对象本体,仅切换灯光组件的启用状态,避免脚本停止运行:

using UnityEngine;

public class LightActivator : MonoBehaviour
{
    private Light _currentLight;

    void Awake()
    {
        _currentLight = GetComponent<Light>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            _currentLight.enabled = !_currentLight.enabled;
        }
    }
}

方案3:切换全局环境光

如果需要控制Unity全局环境光,使用以下代码即可:

using UnityEngine;

public class AmbientLightToggle : MonoBehaviour
{
    // 可自定义开启/关闭时的环境光颜色
    public Color openColor = Color.white;
    public Color closeColor = Color.black;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            RenderSettings.ambientLight = RenderSettings.ambientLight == closeColor ? openColor : closeColor;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:09:01