我应该使用什么而不是OnMouseXXX事件处理程序?

时间:2017-06-16 07:38:57

标签: c# android performance unity3d input

我构建了一个小应用程序,我在一些对象中使​​用OnMouseDrag和OnMouseDown。我认为这将是最好的选择,因为这些方法不属于Update方法。然而,在编译应用程序时,Unity说"游戏脚本或其他自定义代码包含OnMouseXXX事件处理程序。此类处理程序的存在可能会影响手持设备的性能。"

那么......我应该使用什么而不是OnMouseDrag和OnMouseDown?

我已经看到我可以使用Input.GetMouseButtonDown。但要做到这一点,我将不得不为每个具有OnMouseDown的对象添加Update方法。难道不是拥有OnMouseDrag吗?

而且,为什么OnMouseXXX事件对手持设备的性能有害?

1 个答案:

答案 0 :(得分:4)

  

而且,为什么OnMouse事件对手持设备的性能不利   设备

他们的表现并不差。我没有遇到任何糟糕的表现,但你得到这个错误的原因是因为Unity可能会在移动设备上做更多工作以使其正常工作。它不是为此而做的,但是不应该>通过使用它们来注意任何性能损失。

  

那么......我应该使用什么而不是OnMouseDrag和OnMouseDown?

OnMouseDragOnMouseDown功能是专门为桌面设计的。是的,他们也在移动设备上工作,但应该避免使用。

应避免使用它们,因为它们不适用于所有对象。例如,他们不会在新的UGUI系统上工作。

您应该使用OnBeginDragOnEndDrag,这两者都要求您实施IBeginDragHandlerIEndDragHandler

OnBeginDragOnEndDrag函数适用于所有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");
    }
}