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
相关产品推荐
相关产品推荐

