1、打开Unity,导入SteamVR插件
2、删除场景中自带的摄像机,把SteamVR中的CameraRig拖到场景中。
如图2.1 其中Controller为手柄 分左右手柄 Camera指头盔,其中Camera(eye)来控制视角 Camera(ears)来侦听游戏当中的声音。
3.为其中的一个控制器添加脚本组件 ,取名为MoveControl
4.在MoveControl中书写控制移动脚本
//控制器
SteamVR_TrackedObject myController;
//获取右手柄
SteamVR_Controller.Device rightDevice;
myController = this.gameObject.GetComponent<SteamVR_TrackedObject>();//初始化控制器
rightDevice = SteamVR_Controller.Input((int)myController.index);//初始化右手柄
//检测按键并实现上下左右的移动
if(rightDevice.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad))
{
Vector2 cc = rightDevice.GetAxis();
float angle = Vector2.Angle(new Vector2(1, 0), cc);
Vector3 cross = Vector3.Cross(new Vector2(1, 0), cc);
if(cross.z<0)
{
angle *= -1;
}
if(angle>45&&angle<135)
{
player.transform.Translate(cube.transform.forward * speed * Time.deltaTime);
}
if (angle > -135 && angle < -45)
{
player.transform.Translate(-cube.transform.forward * speed * Time.deltaTime);
}
if(angle>135&&angle<180||angle>-180&&angle<-135)
{
player.transform.Translate(-cube.transform.right * speed * Time.deltaTime);
}
if (angle > 0 && angle < 45 || angle > -45&& angle < 0)
{
player.transform.Translate(cube.transform.right * speed * Time.deltaTime);
}
}
这里是通过角度来检测按的是上下左右的。其中的player是CameraRig此时只实现了上下左右的平移,其中的cube为新的游戏物体用于把头盔的旋转角度传递给CameraRig
接下来实现视角的跟随,也就是CameraRig的视角随着头盔的移动而移动
transform.localEulerAngles = new Vector3(0, eye.transform.localEulerAngles.y, 0);
这里是把头盔沿着Y轴的旋转角度赋值给了cube然后再传递给CameraRig.
实现物体的拾取:
if(rightDevice.GetPress(SteamVR_Controller.ButtonMask.Trigger))
{
if(isTrigger)
{
cy.transform.position = this.transform.position;
cy.transform.localEulerAngles = this.transform.position;
}
}
else if((rightDevice.GetPressUp(SteamVR_Controller.ButtonMask.Trigger)))
{
isTrigger = false;
}
private void OnTriggerEnter(Collision other)
{
if(other.gameObject.tag=="c")
{
isTrigger = true;
}
}
}
这里是通过触发器来实现当手柄接触到物体的时候,此时物体的位置以及旋转 角度与手柄的一致,从而实现手柄的拾取功能。
对于此文章有疑惑的可以加我QQ:741889106