如何在WorldSpace UI中使用图形光线投射器

本文关键字:图形 光线投射 WorldSpace UI | 更新日期: 2023-09-27 18:03:41

我想弄清楚如何图形。Raycaster可以工作,但是文档没有帮助。我想用它从某个位置以某个角度投射光线并击中UI。另一件事是,我不知道如何使它与UI交互(拖动,点击等)。我知道这是一个宽泛的话题,但我就是找不到任何好的解释如何使用它,所以我将非常感谢任何解释。

如何在WorldSpace UI中使用图形光线投射器

From Unity docs:

图形光线投射器用于对画布进行光线投射。的Raycaster查看画布上的所有图形并确定是否有他们被击中了。

您可以对图形(UI)元素使用EventSystem.RaycastAllraycast

下面是一个简短的例子:

void Update() {

// Example: get controller's current orientation:
  Quaternion ori = GvrController.Orientation;
  // If you want a vector that points in the direction of the controller
  // you can just multiply this quat by Vector3.forward:
  Vector3 vector = ori * Vector3.forward;
  // ...or you can just change the rotation of some entity on your scene
  // (e.g. the player's arm) to match the controller's orientation
  playerArmObject.transform.localRotation = ori;
  // Example: check if touchpad was just touched
  if (GvrController.TouchDown) {
    // Do something.
    // TouchDown is true for 1 frame after touchpad is touched.
    PointerEventData pointerData = new PointerEventData(EventSystem.current);
    pointerData.position = Input.mousePosition; // use the position from controller as start of raycast instead of mousePosition.
    List<RaycastResult> results = new List<RaycastResult>();
    EventSystem.current.RaycastAll(pointerData, results);
    if (results.Count > 0) {
         //WorldUI is my layer name
         if (results[0].gameObject.layer == LayerMask.NameToLayer("WorldUI")){ 
         string dbg = "Root Element: {0} 'n GrandChild Element: {1}";
         Debug.Log(string.Format(dbg, results[results.Count-1].gameObject.name,results[0].gameObject.name));
         //Debug.Log("Root Element: "+results[results.Count-1].gameObject.name);
         //Debug.Log("GrandChild Element: "+results[0].gameObject.name);
          results.Clear();
     }
   }
}

上面的脚本不是我自己测试的。所以可能会有一些错误。

这里有一些其他的参考文献来帮助你理解更多:

  1. Unity的Graphics Raycaster;它是如何工作的?
  2. 世界空间中针对UI的光线投射
  3. 如何从任意屏幕/画布位置对uGUI对象进行光线投射
  4. 如何执行图形光线投射?
  5. GraphicRaycaster

希望能有所帮助。

Umair M目前的建议没有处理光线起源于世界空间并以一定角度传播的事实。

在我看来,即使你的画布在世界空间中,你也不能在世界空间中以某个角度进行GUI光线投射。这个页面建议创建一个非渲染相机的技术,用你想投射的光线在3D空间中移动它,然后对相机进行GUI光线投射。我还没有试过,但听起来很有希望。