有没有一种快速的方法来检测 Unity 中游戏对象上的拖动事件?

Max*_*iel 4 input unity-game-engine

基本上,我正在设计一个游戏,我需要一个画布图像元素来快速响应并在拖动时向前移动。为此,我正在实现IDragHandler接口。但是OnDrag方法会在大约半秒的延迟后被调用。

public class InputHandler : MonoBehaviour, IDragHandler
{
    public void OnDrag(PointerEventData eventData)
    {
        // this gets logged after about 500 milliseconds
        Debug.Log("mouse dragged");
    }
}
Run Code Online (Sandbox Code Playgroud)

我已将此脚本附加到我想要随拖动一起移动的同一图像元素上。该元素已打开光线投射目标,并且为其父画布启用了图形光线投射组件。图像元素最初落后于触摸点,但随后赶上,因此感觉输入中有一些滞后。有没有办法消除/最小化这种延迟?

kef*_*ren 5

延迟可能是由于默认情况下处于活动状态的 DragThreshold 造成的。您可以通过以下方式禁用它:

public class OnDragScript : MonoBehaviour, IDragHandler, IInitializePotentialDragHandler
{
    public void OnDrag(PointerEventData ped)
    {
        transform.Translate(ped.delta);
    }

    public void OnInitializePotentialDrag(PointerEventData ped)
    {
        ped.useDragThreshold = false;
    }
}
Run Code Online (Sandbox Code Playgroud)