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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:11:09