学习SteamVR基本知识的笔记(一)——手柄与物体的基本互动

一、基本的SteamVR使用

SteamVR最基本的组件是“SteamVR/perfabs”路径下的[CameraRig]预设体,直接拖入可以直接拖入场景中使用VR模式。

二、编写手柄交互脚本

通过脚本实现手柄扣动扳机,抓取物体。

1、创建脚本HandControl.cs

   具体脚本内容:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

publicclassHandControl : MonoBehaviour {

    ///

    ///手柄组件

    ///

    private SteamVR_TrackedObject HandTracked;

    ///

    ///手柄控制器

    ///

    private SteamVR_Controller.Device HandDevice;

    ///

    ///代表触碰到的物体

    ///

    private GameObject BoxObject;

 

    privatevoidStart()

    {

        HandTracked = GetComponent();//获取手柄组件

        //注意,手柄的Index编号并不是Int类型的,使用时必须强制转换成Int类型。

        HandDevice = SteamVR_Controller.Input((int)HandTracked.index);//将控制器定位到当前手柄上

    }

 

    privatevoidUpdate()

    {

        //获取手柄的按键事件,Trigger按键。

        if (HandDevice.GetPressDown(SteamVR_Controller.ButtonMask.Trigger) && BoxObject !=null)//判断是否真的按下了Trigger

        {

            BoxObject.transform.parent = transform;//将物体变成手柄的子物体

            Rigidbody rig = BoxObject.GetComponent();//获取刚体组件

            rig.useGravity = false;//取消重力

            rig.isKinematic = true;//不让刚体受到物理学影响

        }

        if(HandDevice.GetPressUp(SteamVR_Controller.ButtonMask.Trigger) && BoxObject !=null)

        {

            BoxObject.transform.parent =null; //接触物体与手柄的父子关联

            Rigidbody rig = BoxObject.GetComponent();//获取刚体组件

            rig.useGravity = true;//恢复重力

            rig.isKinematic = false;//恢复刚体受到物理学影响

        }

    }

 

    privatevoidOnTriggerEnter(Collider other)

    {

        Debug.Log("手柄触碰到物体");

        BoxObject = other.transform.gameObject;//保存触碰到的物品信息

    }

    privatevoidOnTriggerExit(Collider other)

    {

        Debug.Log("手柄离开物体");

        BoxObject = null;//解除与物体的绑定

    }

    privatevoidOnTriggerStay(Collider other)

    {

        Debug.Log("手柄不断地震动");

        if(BoxObject !=null)

        HandDevice.TriggerHapticPulse(700);//手柄震动,以及震动频率

    }

}

2、将脚本挂载在[CameraRig]下的Controller(left)或者Controller (right)上。之后给手柄添加一个碰撞体,但是碰撞体不需要太过于大,可以调小一点。

3、给需要碰撞的物体添加碰撞体和刚体。

 

注意:

1、手柄在挂载脚本后,记得添加碰撞体,因为手柄默认是不携带碰撞体组件的。

2、可以通过更改Tag配合BoxObject == “”的方式,指定手柄至于某些物体进行互动,而不是所有触碰到的物体。

你可能感兴趣的:(SteamVR学习笔记)