Unity | VRTK游戏的基础设

这篇博客详细介绍了如何使用Unity和VRTK开发VR游戏,包括HTCVIVE设备连接、手柄控制发射子弹功能的实现、以及VRTK插件与UGUI的交互。在Menu Scene制作部分,讲解了如何设置Canvas、EventSystem和VRTK相关组件,以及在VR环境中模拟水果忍者游戏的制作流程,涉及对象生成、碰撞检测和特效呈现等方面。
摘要由CSDN通过智能技术生成

HTCVIVE与设备连接

  1. 汇入SteamVR和VRTK
    • 注意点选I made a back up/ Go ahead更新
    • 对于汇入后报错需要跳转到 line 146: new Texture改为new Texture2D(0,0)

  2. 新建场景Pro1使用SteamVR/Prefabs/[CameraRig],同时删除主摄影机

  3. 给[CameraRig]/Controller(Left)/Model和[CameraRig]/Controller(Right)/Model分别添加BoxCollider(isTrigger=True,Size=(0,0,0)))和Rigibody(useGravity=false)

  4. 場景中加入Cube,添加BoxCollider(isTrigger=T,rigibody(useGravity=F) ,设置Cube.Tag=(new)Object

  5. [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);               
                }
            }
        } 

    }
}

实现手柄控制发射子弹功能

  1. 新建场景Pro2,使用SteamVR/Prefabs/[CameraRig],同时删除主摄影机
  2. 在[CameraRig]/Controller(Left)/Model或[CameraRig]/Controller(Right)/Model下建立Sphere. 設置Rigibody.UseGravity=F;SphereCollider.IsTrigger=F
  3. 给[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
Unity Pico VRTK是一种基于Unity引擎的虚拟现实工具包。它提供了一套强大的工具和功能,用于开发和创建虚拟现实应用程序。VRTK的目标是使开发者能够轻松地构建交互式的虚拟现实体验,无论是在PC平台上还是通过Pico VR备。 Unity是一款流行的游戏引擎,其强大的开发工具和资源使开发者能够创建逼真且富有创意的游戏。 Pico VR是一种虚拟现实备,它提供了沉浸式的虚拟现实体验。Unity Pico VRTK将这两者结合在一起,为开发者提供了用于构建并在Pico VR备上运行虚拟现实应用程序的工具。 Unity Pico VRTK包含了一系列的脚本和示例,以帮助开发者快速上手。它提供了各种常见的虚拟现实互动功能,如手势识别、物体抓取和操作、空间定位和移动等。开发者可以利用这些功能来计并实现各种虚拟现实应用场景,如教育、游戏、培训和仿真等。 除了常见的虚拟现实功能,Unity Pico VRTK还提供了一些高级功能,如碰撞检测、多人联机、音频和视频播放等。这些功能大大增强了用户体验,并允许开发者创造更加丰富多样的虚拟现实应用程序。 总之,Unity Pico VRTK是一个强大的虚拟现实工具包,它为开发者提供了构建和创建虚拟现实应用程序所需的工具和功能。通过使用Unity Pico VRTK,开发者可以轻松地实现交互式的虚拟现实体验,并将其部署到Pico VR备上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值