2017-06-16 70 views
2

我已经构建了一个小应用程序,我在一些对象中使​​用了OnMouseDrag和OnMouseDown。我认为这将是最好的选择,因为这种方法超出了Update方法。然而,在编译应用Unity时,“游戏脚本或其他自定义代码包含OnMouseXXX事件处理程序,这些处理程序的存在可能会影响手持设备的性能。”我应该用什么来代替OnMouseXXX事件处理程序?

所以...我应该用什么来代替OnMouseDrag和OnMouseDown?

我见过我可以使用Input.GetMouseButtonDown。但要做到这一点,我将不得不为每个具有OnMouseDown的对象添加一个Update方法。有没有比OnMouseDrag更糟?

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

回答

4

而且,为什么OnMouse事件在手持设备 上的性能不好?

它们对性能不坏。我没有遇到任何不好的表现,但是你得到这个错误的原因是因为Unity很可能在移动设备上做了更多的工作以使它工作。这不是因为这个,但你不应该只是通过使用它们注意到任何性能。

所以...我应该用什么来代替OnMouseDrag和OnMouseDown?

OnMouseDragOnMouseDown功能是专门为台式机设计的。是的,他们也在移动设备上工作,但应该避免。

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

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

OnBeginDragOnEndDrag函数可用于包括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"); 
    } 
} 
相关问题