我应该使用什么来代替 OnMouseXXX 事件处理程序?

2024-01-17

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

那么...我应该使用什么来代替 OnMouseDrag 和 OnMouseDown 呢?

我已经看到我可以使用Input.GetMouseButtonDown。但要做到这一点,我必须向每个具有 OnMouseDown 的对象添加一个 Update 方法。这不是比 OnMouseDrag 最糟糕吗?

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


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

它们对性能来说并不坏。我没有遇到过任何糟糕的性能,但您收到该错误的原因是 Unity 可能在移动设备上做了更多工作以使其正常工作。它不是为此而设计的,而是为你而设计的should't仅使用它们即可注意到任何性能影响。

那么...我应该使用什么来代替 OnMouseDrag 和 OnMouseDown 呢?

The OnMouseDrag and OnMouseDown功能专为桌面而设计。是的,它们也适用于移动设备,但应避免使用。

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

你应该使用OnBeginDrag and OnEndDrag这两者都需要你实现IBeginDragHandler and IEndDragHandler.

The OnBeginDrag and OnEndDrag函数适用于所有游戏对象,包括 3D、2D 和 UI。对于 2D,您需要附加Physics2DRaycaster到相机。对于 3D,您必须附加PhysicsRaycaster到相机。

See this https://stackoverflow.com/a/41392130/3785314发布有关如何让它在任何游戏对象上工作的文章。

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");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该使用什么来代替 OnMouseXXX 事件处理程序? 的相关文章

随机推荐