我正在 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 出错,因为当执行此代码时,没有任何反应,我突然甚至无法再正常拖动对象了。
有没有办法从我缺少的 C# 脚本中手动触发"OnBeginDrag"?
我以前在创建自定义相机时遇到过这个问题。问题是您的语句"if(Input.GetMouseButton(0))"如果在触发事件之前按住鼠标按钮,则不会返回true。与我认为合乎逻辑的相反,"if(Input.GetMouseButton(0))"并不意味着如果按住鼠标按钮,它意味着更像是在{stuff}然后{more stuff}时单击鼠标按钮。
您应该使用"Input.GetButton()"而不是"Input.GetButtonDown()"。Input.GetButtonDown() 仅对按下按钮的帧返回 true。
http://answers.unity3d.com/questions/412117/do-something-while-key-is-pressed-and-held-down.html
你的问题有点不清楚。您是否让代码在任何方面都可以工作,或者只是在按住鼠标按钮时光标从外部进入时拖动对象?