使用到unity2022.3.2
创建3D项目
打开项目后在Windows - Package Manager里搜索steamvr。
(如果没有需要到steam商店搜一下 Steam VR Plugin 再回来加入到自己项目里)

高版本Unity需要改
下图内容 设置为Always Allowed

然后勾选上(我的是勾着的,没勾的勾一下)

如果streamingAssests中的SteamVR为空文件夹
则需要点击菜单栏Window- SteamVR Input -Save and generate
SteamVR的预制体 CameraRig
相当于玩家 有左手 右手 眼睛
拖到场景里运行,可以带着头盔看看

搭建界面
新建一个Canvas Render Mode 改成World Space
Canvas Scaler改成0.001

然后调整一下这个canvas的大小和位置
可以先reset一下Canvas 然后把大小设置10*10 建一个image看看位置调整一下

戴头盔看看效果。以头盔效果为主
steamVR自带的一些功能


制作射线与按钮的交互
把SteamVR_LaserPointer(激光指示器)代码分别拖到场景中的左右手上。
这时候运行程序会有黑色射线显示,扣动扳机射线变成绿色。(这时还不能与UI交互)
思路:给button添加boxcollider触发碰撞检测。代码方面也是对这个脚本的一些拓展

给button添加boxcollider并调整合适位置大小。
接下来开始写代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Valve.VR.Extras;
[RequireComponent(typeof(SteamVR_LaserPointer))]
public class InteractUI : MonoBehaviour
{
private SteamVR_LaserPointer SteamVR_LaserPointer;
void Start()
{
SteamVR_LaserPointer = GetComponent<SteamVR_LaserPointer>();
SteamVR_LaserPointer.PointerIn += SteamVR_LaserPointer_PointerIn;
SteamVR_LaserPointer.PointerOut += SteamVR_LaserPointer_PointerOut;
SteamVR_LaserPointer.PointerClick += SteamVR_LaserPointer_PointerClick;
}
private void SteamVR_LaserPointer_PointerClick(object sender, PointerEventArgs e)
{
Debug.Log("SteamVR_LaserPointer_PointerClick");
}
private void SteamVR_LaserPointer_PointerOut(object sender, PointerEventArgs e)
{
Debug.Log("SteamVR_LaserPointer_PointerOut");
}
private void SteamVR_LaserPointer_PointerIn(object sender, PointerEventArgs e)
{
Debug.Log("SteamVR_LaserPointer_PointerIn");
}
}
把代码也挂在手柄上后,运行
这时候手柄进入 出 扣动扳机都会打印对应内容。
--------------------------------------------------
在每个方法里都有个PointerEventArgs e这个其实是个struct

那么我们可以通过这个 target去获取我们相应的组件 再进行操作。
-----------------------------------------------------
新建一页代码
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class StartGameUI : MonoBehaviour
{
public Button btn_Start;
public Button btn_Exit;
void Start()
{
btn_Start = GameObject.Find("btn_Start").GetComponent<Button>();
btn_Exit = GameObject.Find("btn_Exit").GetComponent<Button>();
btn_Start.onClick.AddListener(() => { StartGame(); });
btn_Exit.onClick.AddListener(() => { ExitGame(); });
}
public void StartGame()
{
SceneManager.LoadScene(1);
}
public void ExitGame()
{
Application.Quit();
}
}
对应之前的代码修改

这时候把StartGameUI代码挂在canvas上 保证build里拽了这个场景和随意另一个场景(测试用 且场景中有叫这俩名字的button
然后点击运行 就OK辣
------------------------------------------------------------------------------------------------------------------------
1270

被折叠的 条评论
为什么被折叠?



