文章目录
HTCVIVE与设备连接
-
汇入SteamVR和VRTK
• 注意点选I made a back up/ Go ahead更新
• 对于汇入后报错需要跳转到 line 146: new Texture改为new Texture2D(0,0) -
新建场景Pro1使用SteamVR/Prefabs/[CameraRig],同时删除主摄影机
-
给[CameraRig]/Controller(Left)/Model和[CameraRig]/Controller(Right)/Model分别添加BoxCollider(isTrigger=True,Size=(0,0,0)))和Rigibody(useGravity=false)
-
場景中加入Cube,添加BoxCollider(isTrigger=T,rigibody(useGravity=F) ,设置Cube.Tag=(new)Object
-
[CameraRig]/Controller(Left)/Model和[CameraRig]/Controller(Right)/Model添加SteamVRController.cs,将Controller(Left)和Controller(Right)拖入Trackobj槽中
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SteamVRController : MonoBehaviour
{
[Header("VIVE手把控制器")]
public SteamVR_TrackedObject trackobj;
//当HTC VIVE 手把碰到物件
void OnTriggerStay(Collider hit)
{
var steam_state=SteamVR_Controller.Input((int)trackobj.index) ;
/* 更改ButtonMask.Grip/Trigger/System/Touchpad
*
*steam_state.GetPress(SteamVR_Controller.ButtonMask.Grip);
* steam_state.GetPress(SteamVR_Controller.ButtonMask.Trigger);
*steam_state.GetPress(SteamVR_Controller.ButtonMask.System);
*steam_state.GetPress(SteamVR_Controller.ButtonMask.Touchpad);
*GetPressDown;
*GetPressUp;
*if(steam_state.GetPress(SteamXR_Controller.ButtonMask.Grip))
*
*/
//持续按下HTC VIVE 手把上的Grip键
if(steam_state.GetPress(SteamVR_Controller.ButtonMask.Grip))
{
//如果手把碰到的物件标签为Object(如Cube物件)
if(hit.GetComponent<Collider>().tag=="Object")
{
//碰撞物的坐标位置/角度=手把位置/角度
hit.transform.position=transform.position;
hit.transform.rotation=transform.rotation;
//手把先开机的为左手把
//如果按下左手把Grip按钮
if(trackobj.name=="Controller (left)")
{
print("Controller (left) Grip");
var deviceIndex=SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Leftmost);
//手把震动幅度0-3999,如果值小于100,基本上没啥感觉
SteamVR_Controller.Input(deviceIndex).TriggerHapticPulse(3000);
}
else
{
print("Controller (right) Grip");
var deviceIndex=SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Rightmost);
//手把震动幅度0-3999,如果值小于100,基本上没啥感觉
SteamVR_Controller.Input(deviceIndex).TriggerHapticPulse(3000);
}
}
}
}
}
实现手柄控制发射子弹功能
- 新建场景Pro2,使用SteamVR/Prefabs/[CameraRig],同时删除主摄影机
- 在[CameraRig]/Controller(Left)/Model或[CameraRig]/Controller(Right)/Model下建立Sphere. 設置Rigibody.UseGravity=F;SphereCollider.IsTrigger=F
- 给[CameraRig]/Controller(Left)/Model或[CameraRig]/Controller(Right)/Model添加SteamVRFire.cs。将Sphere拖入Bullet槽,Controller(Left)或Controller(Right)拖入Trackobj槽。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SteamVRFire : MonoBehaviour
{
[Header("子弹物件")]
public GameObject Bullet;
//子弹移速
private float Speed=1000f;
//设定子弹销毁时间
private float BulletLife=5f;
[Header("VIVE手把控制器")]
public SteamVR_TrackedObject trackobj;
void Start(){}
// Update is called once per frame
void Update()
{
var steam_state=SteamVR_Controller.Input((int)trackobj.index);
//如果按下滑鼠左键或HTC VIVE 手把Trigger按键
//if(Input.GetMouseButton(0)||steam_state.GetPress(SteamVR_Controller.ButtonMask.Trigger))//
if(Input.GetMouseButton(0)||steam_state.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))
{
//动态生成一颗子弹(强制转换)
GameObject BulletPrefab=Instantiate(Bullet,Bullet.transform.position,Bullet.transform.rotation) as GameObject;
//开启动态生成的物件(子弹)
BulletPrefab.SetActive(true);
//抓取子弹的RigiBody属性
Rigidbody rb=BulletPrefab.Get