2017-06-16 68 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"); 
    } 
} 
相關問題