【问题标题】:Unity3D Raycasting with Oculus Rift Integration / Measuring the distanceUnity3D Raycasting 与 Oculus Rift 集成/测量距离
【发布时间】:2015-07-24 12:57:15
【问题描述】:

我想使用 Oculus Rift 在 Unity3D 游戏引擎中测量两点之间的距离。用户通过查看点 A,按键盘上的 alpha1 和 B,按键盘上的 alpha2 来定位这些点。我已经走到这一步了:

     #pragma strict

 private var measuring = false;
 private var startPoint : Vector3;
 private var dist;

 function Update() {
     var hit : RaycastHit; 
     if (Input.GetKeyDown(KeyCode.Alpha1)) {
         dist = 0.0f;
         if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), hit)) {
         // if (Physics.Raycast(transform.position, transform.forward, hit, 10)) {
            measuring = true;
            startPoint = hit.point; 
         }

     }
     if (measuring && Input.GetKeyDown(KeyCode.Alpha2)) {
         if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), hit)) {
         // if (Physics.Raycast(transform.position, transform.forward, hit, 10)) {
          dist = Vector3.Distance(startPoint, hit.point);
         }
     }
 }

 function OnGUI() {
     if (measuring) {
         GUI.Label(Rect(50,50,180,50), "Distance: " + dist.ToString());
     }
 }

我的问题是,此代码仅适用于标准主相机对象,但我想使用 Oculus 集成的 OVRCameraRig。我收到以下异常消息:

NullReferenceException:对象引用未设置为对象的实例 MeasureInGame.Update () (在 Assets/MeasureInGame.js:11)

我在这个网站上找到了一个解决方案:https://kaharri.com/unity-gaming-shootingaiming-part3-oculus/我创建了一个 ShotSpawner 对象作为 OVRCameraRig 的子对象(这应该像镜头前的枪一样)并将 Raycast 更改为

     Physics.Raycast(transform.position, transform.forward, hit, 10) 

获取用户视图。但它似乎也不起作用。

如何使用 Oculus 主摄像头完成瞄准。我严格需要在要测量的对象上安装对撞机是否正确,或者是否有没有对撞机的解决方案?

问候

【问题讨论】:

    标签: unity3d raycasting measure oculus


    【解决方案1】:

    首先 - 您真的在 Oculus 中使用鼠标吗?当然可以,但标准方法是查看所选对象(光标位于视口中心)。在 oculus 集成中从“中”眼投射光线 - 它是左右眼的父对象。使用此射线而不是来自Camera.main.ScreenPointToRay 的射线:

    // add a reference to the middleEyeGameobject 
    // in your class and link it in the inspector
    var ray=new Ray(middleEyeGameobject.transform.position, middleEyeGameobject.transform.forward);
    

    此外,您不必指定命中光线投射的距离(将第四个参数删除为Physics.Raycast)。


    对于另一个问题,是的,所有东西都必须有一个与Physics.Raycast 的对撞机。是的,还有其他方法可以做到这一点,但 built in ones (2) 仍然需要碰撞器(或类似的),尽管它们可以是虚拟的,而不是附加到对象上。

    最好使用碰撞器,也许在their own layer

    【讨论】:

    • 如果我的回答有效,请接受/+1。
    【解决方案2】:

    你得到的 NullReferenceException 是因为你正在使用 Camera.main.ScreenPointToRay(Input.mousePosition)camera.main 使用 MainCamera 标签 不是为您的 OVRCameraRig 设置的。如果 OVRCameraRig 应该是您的 mainCamera,您可以将此相机的标签设置为 mainCamera,否则您可以参考此相机 (OVRCameraRig) 并使用 cameraRef.ScreenPointToRay(Input.mousePosition)。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-10
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多