Unity C#中不使用协程延迟else语句实现摇杆延迟显示
摇杆图片延迟显示实现(无需协程)
提供两种不用协程的解决方案,均适配你的需求:
方法一:使用Unity的Invoke/CancelInvoke
利用MonoBehaviour自带的延迟调用机制,无需协程即可实现延迟逻辑:
void Update() { if (indicator.inputIndicator.x != 0) { joystick.SetActive(false); // 取消未执行的延迟显示调用,避免重复触发 CancelInvoke(nameof(ShowJoystick)); } else { // 仅当没有待执行的延迟调用时触发,防止多次叠加 if (!IsInvoking(nameof(ShowJoystick))) { // 延迟2秒调用显示方法 Invoke(nameof(ShowJoystick), 2f); } } } private void ShowJoystick() { joystick.SetActive(true); }
逻辑说明:
- 当检测到玩家触摸(输入不为0)时,立即隐藏摇杆,并取消所有待执行的
ShowJoystick调用,避免玩家再次触摸后仍触发延迟显示。 - 当输入停止时,触发2秒延迟调用,时间到后自动显示摇杆。
方法二:时间戳判断
通过记录最后一次输入的时间,每一帧检查时间差来实现延迟:
private float _lastInputTime; void Update() { if (indicator.inputIndicator.x != 0) { joystick.SetActive(false); // 更新最后一次有输入的时间 _lastInputTime = Time.time; } else { // 距离最后一次输入超过2秒时显示摇杆 if (Time.time - _lastInputTime >= 2f) { joystick.SetActive(true); } } }
逻辑说明:
- 每次检测到输入时,更新时间戳并隐藏摇杆。
- 输入停止后,持续检查当前时间与最后输入时间的差值,达到2秒阈值时显示摇杆。这种方法无需额外方法,逻辑更紧凑。
内容的提问来源于stack exchange,提问作者icarus
相关产品推荐
相关产品推荐

