01好久没做vive的项目了。记录一下

使用到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辣

------------------------------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值