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

时间:2019-11-18 14:09:53

标签: unity3d input

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

Row_Update  Row_ID
2019        1
..          ..

我已将此脚本附加到与拖动一起移动的同一图像元素上。此元素具有raycast目标,并且为其父画布启用了图形raycast组件。图像元素最初落在触摸点之后,但随后又赶上,因此感觉输入有些滞后。有没有办法消除/减少这种延迟?

2 个答案:

答案 0 :(得分:1)

滞后可能是由于默认情况下处于活动状态的DragThreshold所致。您可以通过以下方式禁用它:

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

    public void OnInitializePotentialDrag(PointerEventData ped)
    {
        ped.useDragThreshold = false;
    }
}

答案 1 :(得分:0)

尽管我没有发现任何延迟。也许您应该从3个功能(开始,拖动和结束)开始,以了解到底发生了什么。 另外,IDragHandler仅适用于画布元素。因此,开始拖动时,指针应位于UI元素的边界内。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class InputHandler : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    public void OnDrag(PointerEventData eventData)
    {
        Debug.Log("OnDrag");
    }

      public void OnBeginDrag(PointerEventData eventData)
    {
        Debug.Log("Drag Begin");
    }

     public void OnEndDrag(PointerEventData eventData)
    {
        print("Drag End");        
    }

}