Unity 19.4中如何在Update方法内检测Button按钮是否被点击
问题原因
你当前代码中使用的buttonOne.clicked不属于Unity 2019.4 UGUI Button组件的公开可用属性,因此原有判断逻辑无法生效。
实现方案
方案1:状态标记绑定回调(推荐,性能最优)
通过Button原生的点击回调修改状态标记,再在Update中检测标记状态,符合UGUI设计规范,性能消耗最低。
using UnityEngine; using UnityEngine.UI; public class Controller : MonoBehaviour { [Header("Button Objects")] public Button buttonOne; // 按钮点击状态标记 private bool _buttonClickedFlag = false; private void Awake() { // 绑定按钮点击回调 buttonOne.onClick.AddListener(OnButtonClick); } private void Update() { if (_buttonClickedFlag) { Debug.Log("It worked :D"); // 处理完点击逻辑后重置标记,避免重复触发 _buttonClickedFlag = false; } } private void OnButtonClick() { _buttonClickedFlag = true; } private void OnDestroy() { // 移除回调避免内存泄漏 buttonOne.onClick.RemoveListener(OnButtonClick); } }
方案2:纯Update内自主检测点击
如果场景要求完全在Update内完成所有逻辑,不需要提前绑定回调,可以结合EventSystem检测点击对象。
using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class Controller : MonoBehaviour { [Header("Button Objects")] public Button buttonOne; private void Update() { // 检测鼠标左键按下瞬间,移动端可替换为触摸事件判断 if (Input.GetMouseButtonDown(0)) { // 确认当前点击的是UI对象 if (EventSystem.current.IsPointerOverGameObject()) { GameObject clickedObj = EventSystem.current.currentSelectedGameObject; if (clickedObj != null && clickedObj == buttonOne.gameObject) { Debug.Log("It worked :D"); } } } } }
注意:方案2需要场景中存在正常工作的
EventSystem组件,默认创建UGUI元素时会自动生成该组件。
内容的提问来源于stack exchange,提问作者Andrew Rohm
相关产品推荐
相关产品推荐

