Unity3D UI 在编辑器中的行为与设备不同

本文关键字:UI 编辑器 Unity3D | 更新日期: 2023-09-27 18:31:44

在我的代码中,我的LateUpdate函数中有以下几行:

if (!EventSystem.current.IsPointerOverGameObject())
{
      if (Input.touchCount == 2 && Input.GetTouch(0).phase == TouchPhase.Moved && Input.GetTouch(1).phase == TouchPhase.Moved)
      {
      float dot = Vector2.Dot(Input.GetTouch(0).deltaPosition.normalized, Input.GetTouch(1).deltaPosition.normalized);
      if (dot < fingerSepValue )
      {
          CameraZoom();
      }
      else
      {
          MoveCamera();
      }
    }
    if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved)
    {
        var touchDeltaPosition = CameraOrbit();
    }
}

仅当用户未接触 UI 层时,此代码才应运行。这在我的 Unity 项目中工作得很好,但是当我构建到 iPad 时,无论我在屏幕上的哪个位置(无论是 UI 还是其他),都会调用摄像机移动代码。

有谁知道原因吗?我做错了什么吗?

Unity3D UI 在编辑器中的行为与设备不同

您可以使用 IPointerDownHandler、IPointerUpHandler 等事件执行相同的操作。然后,您必须将物理光线投射器添加到摄像机,并将碰撞体添加到包含脚本的游戏对象。或者,如果您必须使用IsPointerOverGameObject http://forum.unity3d.com/threads/touch-press-pass-through-all-ui-elements.272892/,您可以在此处寻找解决方案