Unity3D 光线投射与 Oculus Rift 集成/测量距离
Unity3D Raycasting with Oculus Rift Integration / Measuring the distance
我想使用 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 主摄像头完成瞄准。我严格需要在我的待测物体上安装对撞机是否正确,或者是否有没有对撞机的解决方案?
问候
首先 - 你真的在 Oculus 上使用鼠标吗?当然可以,但标准方法是查看所选对象(光标位于视口中心)。在 oculus 集成中从 "middle" 眼睛投射光线 - 它是左眼和右眼的父对象。使用此光线而不是 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);
此外,您不必指定 hit raycast 的距离(删除第四个参数 Physics.Raycast
)。
对于附加问题,是的,所有东西都必须有一个与 Physics.Raycast
的对撞机。是的,还有其他方法可以做到这一点,但是 built in ones (2) 仍然需要对撞机(或类似的),尽管它们可以是虚拟的,而不是附加到对象上。
最好使用对撞机,也许在their own layer。
你得到的 NullReferenceException 是因为你正在使用 Camera.main.ScreenPointToRay(Input.mousePosition) , camera.main 使用未为您的 OVRCameraRig 设置的 MainCamera 标签。如果 OVRCameraRig 应该是您的主相机,您可以将此相机的标签设置为 mainCamera,否则您可以参考此相机 (OVRCameraRig) 并使用 cameraRef.ScreenPointToRay(Input.mousePosition)。 :)
我想使用 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 主摄像头完成瞄准。我严格需要在我的待测物体上安装对撞机是否正确,或者是否有没有对撞机的解决方案?
问候
首先 - 你真的在 Oculus 上使用鼠标吗?当然可以,但标准方法是查看所选对象(光标位于视口中心)。在 oculus 集成中从 "middle" 眼睛投射光线 - 它是左眼和右眼的父对象。使用此光线而不是 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);
此外,您不必指定 hit raycast 的距离(删除第四个参数 Physics.Raycast
)。
对于附加问题,是的,所有东西都必须有一个与 Physics.Raycast
的对撞机。是的,还有其他方法可以做到这一点,但是 built in ones (2) 仍然需要对撞机(或类似的),尽管它们可以是虚拟的,而不是附加到对象上。
最好使用对撞机,也许在their own layer。
你得到的 NullReferenceException 是因为你正在使用 Camera.main.ScreenPointToRay(Input.mousePosition) , camera.main 使用未为您的 OVRCameraRig 设置的 MainCamera 标签。如果 OVRCameraRig 应该是您的主相机,您可以将此相机的标签设置为 mainCamera,否则您可以参考此相机 (OVRCameraRig) 并使用 cameraRef.ScreenPointToRay(Input.mousePosition)。 :)