首页 > 解决方案 > Unity:拖放脚本不适用于我的预制游戏对象,但适用于常规 UI 游戏对象

问题描述

我有一个简单的脚本,可以在任何普通的 UI 对象(如图像)上正常工作。

但它对我的预制游戏对象根本不起作用,这是为什么呢?我已经附上了一大堆组件来尝试,比如图像、画布渲染器和各种,对我来说没有任何用处。我也只能在运行游戏时看到该死的预制件,我在游戏选项卡上看不到它。我没有任何线索。这太奇怪了。

无论如何,如果我没有说清楚,请让我知道我需要解释或包括什么让任何人给我答案?

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


    public void OnDrag(PointerEventData eventData)
    {
        this.transform.position = eventData.position;
        Debug.Log("ondrag");
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        Debug.Log("onEndDrag");
    }
}

这个脚本只适用于 UI 的东西吗?如果是这样,我可以将组件添加到我的预制件中,使其成为 UI 项吗?我在二维工作。

标签: unity3ddragdrop

解决方案


默认情况下,这些最初的UI事件仅投射到已启用的 UI 元素( 、 等)上(使用Image附加Text到的组件)。Raycast TargetGraphicsRaycasterCanvas

如果您希望能够在您需要的“普通”3D 对象上使用它们

  • EventSystem您的场景中(已经是这种情况,否则它也不适用于 UI)
  • Collider对象上的组件
  • 你的一个PhysicsRaycaster组件Camera

出于某种原因,我不知道这仅在中提到,IPointerClickHandler (Unity 2019.1 and older)但 afaik 这仍然适用于所有EventSystem-related 事件/接口。


推荐阅读