而且,为什么OnMouse事件在手持设备 上的性能不好?
它们对性能不坏。我没有遇到任何不好的表现,但是你得到这个错误的原因是因为Unity很可能在移动设备上做了更多的工作以使它工作。这不是因为这个,但你不应该只是通过使用它们注意到任何性能。
所以...我应该用什么来代替OnMouseDrag和OnMouseDown?
OnMouseDrag
和OnMouseDown
功能是专门为台式机设计的。是的,他们也在移动设备上工作,但应该避免。
应避免使用它们,因为它们不适用于所有对象。例如,它们不适用于新的UGUI系统。
您应该使用OnBeginDrag
和OnEndDrag
,这两者都要求您实施IBeginDragHandler
和IEndDragHandler
。
OnBeginDrag
和OnEndDrag
函数可用于包括3D,2D和UI在内的所有GameObjects。对于2D,您需要将Physics2DRaycaster
附加到相机。对于3D,您必须将PhysicsRaycaster
附加到相机。
请参阅this发布如何让它在任何游戏对象上工作。
using UnityEngine.EventSystems;
public class Dragger: MonoBehaviour,
IBeginDragHandler, IEndDragHandler
{
public void OnBeginDrag(PointerEventData eventData)
{
Debug.Log("Drag Begin");
}
public void OnDrag(PointerEventData eventData)
{
Debug.Log("Dragging");
}
public void OnEndDrag(PointerEventData eventData)
{
Debug.Log("Drag Ended");
}
}