unity3d - 光线投射世界空间UI

时间:2016-11-01 20:31:09

标签: unity3d raycasting virtual-reality daydream

需要一些有关Daydream的光线投射UI的帮助。由于只有gameObjects(立方体)的演示,我想知道我可以处理UI元素。 UI元素应该像往常一样反应,我的意思是突出显示等等。 How to use Graphic Raycaster with WorldSpace UI?中的帖子很有帮助,但完全没有。

我使用DrawRay来查看我的指针实际经过的位置并且效果很好。但是没有创建日志消息。

 void Update()
  {
      Quaternion ori = GvrController.Orientation;
      Vector3 vector = ori * Vector3.forward;
      Debug.DrawRay(transform.position, vector * 100000, Color.green);
      PointerEventData pointerData = new PointerEventData(null);
      pointerData.position = vector;
      Debug.Log(vector);
      List<RaycastResult> results = new List<RaycastResult>();
      EventSystem.current.RaycastAll(pointerData, results);
      if (results.Count > 0)
      {
          Debug.Log(results[0]);
      }
  }

Canvas(World Space)和Button创建为useal且未修改。

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

在你的情况下,我看到两个问题:

  • 我认为你应该使用PointerEventData pointerData = new PointerEventData(EventSystem.current);
  • PointerEventData pointerData = new PointerEventData(null);内容
  • 同样PointerEventData.position Vector2 ,而不是 Vector3 :您应该尝试pointerData.position = new Vector2(Screen.width * 0.5f, Screen.height * 0.5f);

作为旁注,您可以使用graphicRaycaster.Raycast(pointerData, results); graphicRaycaster 是公开的,并为其指定 GraphicRaycaster 组件 Canvas

答案 1 :(得分:0)

这个有用的方法怎么样:

Vector3 CurrentRaycastResultWorldPosition = GvrPointerInputModule.Pointer.CurrentRaycastResult.worldPosition;         

答案 2 :(得分:-1)

根据您的问题光线投射世界空间用户界面,如果您使用谷歌卡片或白日梦,则应尝试将脚本gvrgraphicphysics raycaster附加到UI画布。