C# 单击外部对象,在顶部开始拖动

C# 单击外部对象,在顶部开始拖动,c#,unity3d,unity5,C#,Unity3d,Unity5,我在Unity中实现了一个IDragHandler,我不仅希望在触摸对象时能够开始拖动它,而且希望在指针向下时能够从外部进入它。我的代码的核心是: public class Draggable : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerEnterHandler { public void OnBeginDrag(PointerEventData eventData) {

我在Unity中实现了一个IDragHandler,我不仅希望在触摸对象时能够开始拖动它,而且希望在指针向下时能够从外部进入它。我的代码的核心是:

public class Draggable : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerEnterHandler
{
    public void OnBeginDrag(PointerEventData eventData)
    {
        ...
    }

    public void OnDrag(PointerEventData eventData)
    {
        ...
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        ...
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        // TODO: Don't just check mouse, take touch into account!
        if (Input.GetMouseButton(0))
        {
            this.OnBeginDrag(eventData);
        }
    }
}
因此,基本上,如果指针进入对象时指针向下,我想开始拖动它。然而,这段代码似乎只是给该对象的EventSystem设置了bug,因为当执行这段代码时,什么都没有发生,我突然不能再正常地拖动该对象了


有没有办法从我丢失的C#脚本中手动触发“OnBeginDrag”?

我以前在创建自定义相机时遇到过这个问题。问题在于,如果在触发事件之前按住鼠标按钮,则语句“if(Input.GetMouseButton(0))”不会返回true。与我认为的逻辑相反,“if(Input.GetMouseButton(0))”并不意味着如果按住鼠标按钮,它的意思更像是在{stuff}然后{more stuff}的时候单击鼠标按钮

您应该使用“Input.GetButton()”而不是“Input.GetButtonDown()”。Input.GetButtonDown()仅在按下按钮的帧中返回true


你的问题有点不清楚。您是否已经让代码在任何方面都能正常工作,或者只是在按住鼠标按钮的同时从外部进入光标时拖动对象,您对此感到疑惑?

谢谢您的回答!我将“GetMouseButton”解释为“GetButton”,但具体使用了鼠标按钮,因为有一个“GetMouseButtonDown”函数可用,对应于t“GetButtonDown”,所以如果这是正确的,那么我应该已经处理了这个问题。对不起,我不清楚。我的“开始拖动”、“拖动”和“结束拖动”都可以正常工作。我只想通过手动调用BeginDrag来触发该链,以开始我实现的拖动行为,即使指针下降事件发生在object.hmmm之外。那我不确定。我认为你对“获取按钮”这件事的看法是正确的。我的错误。您现在应该做的是使用debug.log查看出了什么问题。例如,您可以将debug.log放在if语句中,类似于debug.log(“此部分工作”);看看它是否在开火。消息将显示在控制台中。这可以帮助您找出哪些不起作用,以及从何处开始修复。我知道我有各种各样的脚本不起作用,原因是使用debug.log无法找到。例如,我曾经做过一个平台,它应该以90度的增量旋转,例如从270度旋转到360度,以此类推。它从来没有开火过,我也不明白为什么不能。最后,这是因为我使用了一个if语句,if-degrees,谢谢!:)我发现OnBeginDrag实际上调用正确,问题是我只是调用OnBeginDrag,而不是从UnityEngine.EventSystems启动拖动事件链。因此,OnBeginDrag只被调用一次,但OnDrag不会被EventSystems连续调用。