我构建了一个小应用程序,在某些对象中使用 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(使用前将#替换为@)