我构建了一个小应用程序,我在一些对象中使用OnMouseDrag和OnMouseDown。我认为这将是最好的选择,因为这些方法不属于Update方法。然而,在编译应用程序时,Unity说"游戏脚本或其他自定义代码包含OnMouseXXX事件处理程序。此类处理程序的存在可能会影响手持设备的性能。"
那么......我应该使用什么而不是OnMouseDrag和OnMouseDown?
我已经看到我可以使用Input.GetMouseButtonDown。但要做到这一点,我将不得不为每个具有OnMouseDown的对象添加Update方法。难道不是拥有OnMouseDrag吗?
而且,为什么OnMouseXXX事件对手持设备的性能有害?
答案 0 :(得分:4)
而且,为什么OnMouse事件对手持设备的性能不利 设备
他们的表现并不差。我没有遇到任何糟糕的表现,但你得到这个错误的原因是因为Unity可能会在移动设备上做更多工作以使其正常工作。它不是为此而做的,但是不应该>>通过使用它们来注意任何性能损失。
那么......我应该使用什么而不是OnMouseDrag和OnMouseDown?
OnMouseDrag
和OnMouseDown
功能是专门为桌面设计的。是的,他们也在移动设备上工作,但应该避免使用。
应避免使用它们,因为它们不适用于所有对象。例如,他们不会在新的UGUI系统上工作。
您应该使用OnBeginDrag
和OnEndDrag
,这两者都要求您实施IBeginDragHandler
和IEndDragHandler
。
OnBeginDrag
和OnEndDrag
函数适用于所有GameObjects,包括3D,2D和UI。对于2D,您需要将Physics2DRaycaster
附加到相机。对于3D,您必须将PhysicsRaycaster
附加到相机。
请参阅this帖子,了解如何使其适用于任何GameObject。
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");
}
}