【问题标题】:Unity button onClick event trigger has a noticeable delayunity button onClick 事件触发有明显延迟
【发布时间】:2018-02-26 10:15:34
【问题描述】:

为什么我的按钮的 onClick 功能有一个小而明显的延迟?我正在从启动动画的 onClick 函数中内置的按钮调用一个函数。此动画开始,但有明显的延迟。

通过在更新函数中检查 Input.GetMouseButtonDown(0) 来调用该函数会消除此延迟,并且动画会立即开始。

所以我得出的结论是按钮 OnClick 功能是问题所在,但我似乎无法在网上找到有同样问题的人。如何解决此延迟?

延迟:

无延迟:

private void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        explosionWave.Detonate();
    }
}

我正在使用 Unity 2017.1.1

解决方案:

感谢@Lelefant,没有意识到在 mouseUp 上调用了 OnClick。但是,奇怪的是 mouseUp 也有同样的延迟。无论哪种方式,这都解决了问题:

using UnityEngine;
using UnityEngine.EventSystems;
public class OnPointerDownExplode : MonoBehaviour, IPointerDownHandler// required interface when using the OnPointerDown method.
{
    public ExplosionWave explosionWave;

    //Do this when the mouse is clicked over the selectable object this script is attached to.
    public void OnPointerDown(PointerEventData eventData)
    {
        explosionWave.Detonate();
    }
}

【问题讨论】:

  • 您的场景中有很多 UI 元素吗?确保所有不需要点击的 UI 元素都将 raycastTarget 标志设置为 false(文本、原始图像、图像)

标签: c# unity3d


【解决方案1】:

在 mouseUp 时触发的 Button.OnClick 事件。 如果您不想在Update() 期间检查,可以将脚本附加到实现IPointerDownHandler 的按钮。

请记住,onClick 允许用户将指针拖出按钮以取消操作,而 onPointerDown 会立即开始操作。

【讨论】:

    猜你喜欢
    • 2013-03-12
    • 2013-07-01
    • 2012-01-24
    • 2013-04-25
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多