为了以示区别,我们在更改支持的SDK前先等待3秒,在此时间内,只有电脑屏幕有画面,3s过后,我们可以看到VIVE头盔被激活。此时应注意在enable前,需等待一帧,否则会报错。
在添加了VR支持后,我们会发现在camera的Inspector面板中多出如图2所示的几个选项。
// Position of node local to its tracking space.
// ///
public static Vector3 GetLocalPosition(VRNode node);
// Summary:
// ///
// The current rotation of the requested VRNode.
// ///
// Parameters:
// node:
// Node index.
// Returns:
// ///
// Rotation of node local to its tracking space.
// ///
public static Quaternion GetLocalRotation(VRNode node);
// Summary:
// ///
// Center tracking to the current position and orientation of the HMD.
// ///
public static void Recenter();
以下,我们通过一个简单的示例来演示如何使用InputTracking类来模拟手柄。
新建两个cude,一个命名为LeftHand,一个命名为RightHand. Cube的scale设为0.2。
然后新建一个empty game object,命名为Virtual man,作为手柄和相机的父物体。
把main camera和LeftHand, RightHand拖到Virtual man下面,并将其位置归为0。
新建脚本RightHand.cs和LeftHand.cs,分别关联到LeftHand, RightHand上。
在Update函数中写:
this.transform.localPosition = InputTracking.GetLocalPosition(VRNode.RightHand);
this.transform.localRotation = InputTracking.GetLocalRotation(VRNode.RightHand);
LeftHand脚本中做出相应的替换即可。
运行程序,我们就可以看到手柄变成了两个cube。
手柄的按键
HTC VIVE手柄的按键可以在Edit->Project Setting->Input中设定。
首先,我们需要找到HTC VIVE手柄对应的ID号,在unity的官网上可以找到其对应的信息:
https://docs.unity3d.com/Manual/OpenVRControllers.html
首先,我们以RightHand和LeftHand为父物体,各添加一个空物体。
然后在空物体上添加Line Renderer组件。
新建一个材质,将其shader改为Unlit/Color,并将其添加到Line Renderer上,这样我们就可以更改射线的颜色。
Line Renderer的设置信息参考如下:
Debug.Log(hit.transform.name);
hit.transform.GetComponent<UnityEngine.UI.Button>().OnSubmit(new BaseEventData(EventSystem.current));
使用这种方法对于UI的通用性比较差,如果我们在添加toggle或是其他UI组件,就要重新的GetComponent,比较麻烦,为此,我们可以采取以下的做法。
首先,我们在场景中在新建一个UI toggle。然后在ButtonClick函数中添加如下的函数:
public void Do2()
Debug.Log("Press the toggle");
然后在toggle上的onClick()中添加如下:
Debug.Log(hit.transform.name);
// hit.transform.GetComponent<UnityEngine.UI.Button>().OnSubmit(new BaseEventData(EventSystem.current));
ExecuteEvents.Execute<ISubmitHandler>(hit.transform.gameObject, new BaseEventData(EventSystem.current), ExecuteEvents.submitHandler);