SteamVR简单开发记录过程

SteamVR简单开发记录过程

一、下载VR环境插件:

1、下载Steam安装包,然后安装Steam

2、下载SteamVR Plugin插件,导入插件:

在这里插入图片描述

3、导入后设置:

在这里插入图片描述
注意:
这里有时会出现一个很大的问题,如果lnitialize XR on Startup默认是开启状态,那么我们在还没有进入VR场景的时候,程序就已经将VR初始化完了,这时的程序有时就会很卡顿,也不是一定会出现,本人就遇到了,但是又因为在程序运行后,OpenVR Loader的选项已不可动态修改,所以采取了下面的解决方式:

取消勾选 lnitialize XR on Startup
勾选 OpenVR Loader

在这里插入图片描述
然后在进入VR和退出VR模式的时候分别代码控制VR的初始化,代码如下:
进入VR:

/// <summary>
        /// 进入VR
        /// </summary>
        /// <returns></returns>
        private IEnumerator EnterVR()
        {
            yield return XRGeneralSettings.Instance.Manager.InitializeLoader();
            if (XRGeneralSettings.Instance.Manager.activeLoader == null)
            {
                Debug.LogError("Initializing XR Failed. Check Editor or Player log for details.");
            }
            else
            {
                XRGeneralSettings.Instance.Manager.StartSubsystems();
                yield return null;
            }
        }

退出VR:

 public void ExitVR()
        {
            if (XRGeneralSettings.Instance.Manager.isInitializationComplete)
            {
                XRGeneralSettings.Instance.Manager.StopSubsystems();
                Debug.Log("退出VR");
            }
            //卸载VR场景
            SceneManager.UnloadSceneAsync(2);
        }

如果我们没有执行上边的代码,那么我们执行VR场景的时候,还是需要将lnitialize XR on Startup勾选上,不然进入不了VR模拟。

4、下载VIVE Input Utility插件,导入插件:

VIVE Input Utility插件导入
注意
导入成功以后,就可以观看示例VR的案例功能。
然后贴一个博主介绍的很详细,我也是从这里学到了如何使用,感谢博主。
https://blog.csdn.net/u010645062/article/details/126423571

5、开发使用:

在这里插入图片描述
5.1、ViveCameraRig:包含摄像机和左右手柄,有需要修改可以在这里寻找。
5.2、ViveCurvePointers:抛物线,发射抛物线射线
5.3、VivePointers:直线,发射直线射线
用哪个就拖哪个。然后根据需求添加事件,根据需求设置左手和右手的事件或者是防冲突方法,避免混乱。
在这里插入图片描述
5.4、可以直接加代码控制各种按钮的事件执行:

 private void Update()
        {
            //菜单按钮按下事件
            if (ViveInput.GetPressDown(HandRole.RightHand, ControllerButton.Menu))
            {
                if (!IsShow)
                {
                    VRPanel.SetActive(true);
                    IsShow = true;
                }
                else
                {
                    VRPanel.SetActive(false);
                    IsShow = false;
                }
            }
            if (ViveInput.GetPressDown(HandRole.LeftHand, ControllerButton.Menu))
            {
                if (!IsShow)
                {
                    VRPanel.SetActive(true);
                    IsShow = true;
                }
                else
                {
                    VRPanel.SetActive(false);
                    IsShow = false;
                }
            }

            //面板左键抬升
            if (ViveInput.GetPressDown(HandRole.RightHand, ControllerButton.DPadLeft))
            {
                VrCamera.transform.position = new Vector3(VrCamera.transform.position.x, LimitValue(VrCamera.transform.position.y + distance_Y), VrCamera.transform.position.z);
            }
            if (ViveInput.GetPressDown(HandRole.LeftHand, ControllerButton.DPadLeft))
            {
                VrCamera.transform.position = new Vector3(VrCamera.transform.position.x, LimitValue(VrCamera.transform.position.y + distance_Y), VrCamera.transform.position.z);
            }

            //面板右键下降
            if (ViveInput.GetPressDown(HandRole.RightHand, ControllerButton.DPadRight))
            {
                VrCamera.transform.position = new Vector3(VrCamera.transform.position.x, LimitValue(VrCamera.transform.position.y - distance_Y), VrCamera.transform.position.z);
            }
            if (ViveInput.GetPressDown(HandRole.LeftHand, ControllerButton.DPadRight))
            {
                VrCamera.transform.position = new Vector3(VrCamera.transform.position.x, LimitValue(VrCamera.transform.position.y - distance_Y), VrCamera.transform.position.z);
            }
        }

        /// <summary>
        /// 限制Y轴的值
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        private float LimitValue(float value)
        {
            return Mathf.Clamp(value, minValue, maxValue);
        }

6、打完收工。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值