【问题标题】:Unity Event for drag operation拖拽操作的Unity事件
【发布时间】:2021-11-18 23:00:57
【问题描述】:

我正在检查不同的统一事件以进行鼠标拖动。我发现 IDragHandler 接口提供了一个 OnDrag 方法,当任何 UI 组件发生拖动操作时都会调用该方法(如果我错了,请纠正我)。 我找到了另一种方法'EventTrigger.OnDrag(PointerEventData data)' 在文档中,它写道 - "在拖动过程中每次移动指针时由 EventSystem 调用"

所以,我在以下文档规定的统一项目中使用了它

            private void Start()
            {
                //Fetch the Event Trigger component from your GameObject
                trigger = GetComponent<EventTrigger>();
                //Create a new entry for the Event Trigger
                EventTrigger.Entry entry = new EventTrigger.Entry();
                //Add a Drag type event to the Event Trigger
                entry.eventID = EventTriggerType.Drag;
                //call the OnDragDelegate function when the Event System detects dragging
                entry.callback.AddListener((data) => OnDragDelegate((PointerEventData) data));
                //Add the trigger entry
                trigger.triggers.Add(entry);
                
            }

            void OnDragDelegate(PointerEventData data)
            {
                DragToMotion();
            }

所以,当发生任何拖动操作时,应该调用 OnDragDelegate()。我有一个带有盒子碰撞器的立方体,我将鼠标拖到它上面。我检查了检查器,但发现拖动时没有调用任何方法,DragToMotion() 中的操作也没有执行。

请纠正我做错了什么。有什么办法可以解决这个问题?

【问题讨论】:

    标签: c# unity3d eventtrigger


    【解决方案1】:

    您需要对象上的某种碰撞器以及相机上的Physics Raycaster。我相当有信心EventTriggers 只是拖动/指针接口的检查器版本。

    使用任何一个都应该以相同的结果结束。您可以添加组件,然后在对象上设置回调,而不是访问事件触发器并将其添加到代码中。

    【讨论】:

    • 我实际上也尝试从检查器中添加一个回调函数,但没有奏效。虽然没有检查相机上的 Physics Raycaster 选项
    • 它也不起作用,它们的工作方式相同。如果没有物理光线投射器,两者都将无法工作。
    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多