[unity]Pico VR unity开发笔记(一)

news/2025/2/6 2:57:01/

Pico VR 开发笔记(一)

XR Interaction Tooikit 版本 2.3.2

一、环境搭建

其实官方文档已经写的很详细了,这里只是不废话快速搭建,另外有一项官方说明有误的,补充说明一下,在开发工具部分说明

插件安装——安装pico的sdk和XR Interaction Tooikit

环境配置——在场景里添加头显和手柄,并进行配置和项目配置

开发工具——Pico提供的串流开发工具,可以在不打包的情况的,使用手柄和头显进行调试。

1、插件安装

pico SDK安装

pico SDK下载地址:SDK - PICO 开发者平台 (pico-interactive.com)

SDK下载后解压

打开unity→Window→PackgeManager→Add Package From disk(左上角+)→选择解压后文件里的package.json

XR Interaction Tooikit安装

在packgeManager里搜索XR Interaction Tooikit

选择版本尽量高版本,不要低于2.1.0。

打开Samples 面板,导入 Starter Assets、**XR Device Simulater **和 Tunneling Vignette

2、环境配置

场景配置

添加XR Origin:Hierarchy→Add(左上角+)→XR→XR Origin(VR)

手柄设置

  1. 选中Hierarchy的XR Origin子物体LeftHand Controller

  2. 配置LeftHand Controller的控件XR Controller,点击在右上角的预设,选择XRI Default Left Controller (右手柄同样配置,选择XRI Default Right Controller )

  3. 选择手柄模型,在XR Controller的Model Prefab选择LeftControllerModel(Tranform)

打包设置

选择:Edit→Player→settings for Android→other Setting

Minimum API Level 选择Android 10.0

Target API Level 选择Automatic(Highest installed)

Scripting Backend 选择IL2CPP

勾选ARM64

选择:Edit→Project Settings→XR Plug-in Management→Android Standalone Settings→选择PICO

3、开发工具

SDK安装

下载地址:SDK - PICO 开发者平台 (PICO Unity Live Preview Plugin)

SDK下载后解压

打开unity→Window→PackgeManager→Add Package From disk(左上角+)→选择解压后文件里的package.json

windows下载客户端

下载地址:SDK - PICO 开发者平台 (PICO Developer Center)

在本地安装后会安装steam串流工具

为一体机开启开发者模式

  1. 开启 PICO VR 一体机。
  2. 前往 设置 > 通用
  3. 射线对准 设置 字段并连续点击多次,直到左侧导航栏下方出现 开发者 选项。
  4. 点击 开发者,进入开发者选项界面。
  5. 打开右上角的 USB 调试开关

*这里官方文档有误,开启开发者模型要多次点击设置键

项目设置

选择:Edit→Project Settings→XR Plug-in Management→ PC Standalone Settings→选择 PICO Live Preview

二、开发

1、手柄输入

得到手柄

    InputDevice deviceLeft;//左手柄InputDevice deviceRight;//右手柄private void Start(){deviceLeft = InputDevices.GetDeviceAtXRNode(XRNode.LeftHand);deviceRight = InputDevices.GetDeviceAtXRNode(XRNode.RightHand);}

手柄触发核心方法 TryGetFeatureValue

手柄扳机键触发

    /// <summary>/// 扳机键/// </summary>/// <param name="inputDevice">手柄</param>/// <param name="action">触发委托</param>/// <param name="Value">触发参数</param>void triggerButton(InputDevice inputDevice, ref bool Value, Action action){if (inputDevice.TryGetFeatureValue(CommonUsages.triggerButton,out Value)&&Value){action();}}

扳机键力度

    /// <summary>/// 扳机键力度/// </summary>/// <param name="inputDevice">手柄</param>/// <param name="action">触发委托</param>/// <param name="Value">触发参数</param>void trigger(InputDevice inputDevice, ref float Value, Action<float> action){if (inputDevice.TryGetFeatureValue(CommonUsages.trigger, out Value)&& !Value.Equals(0)){action(Value);}}

抓握键

    /// <summary>/// 抓握键/// </summary>/// <param name="inputDevice"></param>/// <param name="action"></param>/// <param name="Value"></param>void gripButton(InputDevice inputDevice, ref bool Value, Action action){if (inputDevice.TryGetFeatureValue(CommonUsages.gripButton, out Value) && Value){action();}}

抓握键力度

    /// <summary>/// 抓握键力度/// </summary>/// <param name="inputDevice"></param>/// <param name="action"></param>/// <param name="Value"></param>void grip(InputDevice inputDevice, ref float Value, Action<float> action){if (inputDevice.TryGetFeatureValue(CommonUsages.grip, out Value) && !Value.Equals(0)){action(Value);}}

摇杆方向

    /// <summary>/// 摇杆方向/// </summary>/// <param name="inputDevice"></param>/// <param name="action"></param>/// <param name="Value"></param>void primary2DAxis(InputDevice inputDevice, ref Vector2 Value, Action<Vector2> action){if (inputDevice.TryGetFeatureValue(CommonUsages.primary2DAxis, out Value) && !Value.Equals(Vector2.zero)){action(Value);}}

摇杆

    /// <summary>/// 摇杆/// </summary>/// <param name="inputDevice"></param>/// <param name="Value"></param>/// <param name="action"></param>void primary2DAxisClick(InputDevice inputDevice, ref bool Value, Action action){if (inputDevice.TryGetFeatureValue(CommonUsages.primary2DAxisClick, out Value) && Value){action();}}

X/A

    /// <summary>/// X/A/// </summary>/// <param name="inputDevice"></param>/// <param name="Value"></param>/// <param name="action"></param>void primaryButton(InputDevice inputDevice, ref bool Value, Action action){if (inputDevice.TryGetFeatureValue(CommonUsages.primaryButton, out Value) && Value){action();}}

Y/B

    /// <summary>/// Y/B/// </summary>/// <param name="inputDevice"></param>/// <param name="Value"></param>/// <param name="action"></param>void secondaryButton(InputDevice inputDevice, ref bool Value, Action action){if (inputDevice.TryGetFeatureValue(CommonUsages.secondaryButton, out Value) && Value){action();}}

2、射线

得到射线的方法

XRRayInteractor.TryGetCurrent3DRaycastHit(out hit)

XRRayInteractor是手柄的脚本XRRayInteractor

Demo

    public XRRayInteractor rayInteractor;RaycastHit hit;Vector3 getRayPoint(){if (rayInteractor.TryGetCurrent3DRaycastHit(out hit)){string name = hit.collider.name;Debug.Log(name);return hit.point;}else{return Vector3.zero;}}

http://www.ppmy.cn/news/514816.html

相关文章

生化危机暗黑历代记汉化终于完成了

生化危机暗黑历代记汉化终于完成了&#xff0c;500多K的文本&#xff0c;哎&#xff0c;射击游戏还这么多文本...... 不过总算是有始有终&#xff0c;第一个完全自己搞定的游戏汉化&#xff0c;付出了很多&#xff0c;也学到了很多&#xff0c;希望以后有精力再搞几个。 汉化游…

该死的Word——修复Doc文档的灵异错误

杀死鬼行 关于鬼行&#xff0c;其实是我个人的一种描述。很多人都遇到这样的问题&#xff0c;当编辑完(尤其是一个特别大的或者带有格式的)文档后&#xff0c;不知不觉再次打开时发现&#xff0c;有些明明是文档正文的部分&#xff0c;偏偏变成了标题样式&#xff0c;不管你…

调戏木马病毒的正确姿势-基础篇

本文参与i春秋社区原创文章奖励计划,未经许可禁止转载! 目录 ----------------------理论基础篇------------------- 从科幻小说说起: 危险的潘多拉盒子 来说说应用程序编程接口 工欲善其事必先利其器 (*)正确地作死 (*)被劫…

调戏木马病毒的正确姿势——上

目录----------------------理论基础篇------------------- 从科幻小说说起&#xff1a; 危险的潘多拉盒子 来说说应用程序编程接口 工欲善其事必先利其器 &#xff08;*&#xff09;正确地作死 &#xff08;*&#xff09;被劫持的应用程…

2019上半年勒索病毒专题报告

2019上半年由勒索病毒攻击造成的国内外大小事件&#xff0c;可发现伴随着传统行业逐渐数字化、网络化、智能化、逐步拥抱产业互联网化的大浪潮中&#xff0c;暴露出一系列网络安全问题。勒索病毒也乘机发难&#xff0c;疯狂敛财&#xff0c;影响日渐扩大。全球范围内的交通、能…

勒索病毒资料(腾讯管家整理)

目录 一、勒索病毒概述 二、勒索病毒发展史 三、勒索病毒感染数据 四、活跃勒索病毒家族 五、主要攻击特征 六、重点勒索事件回顾 七、勒索病毒未来趋势 八、勒索病毒应急处置手册 2017年5月12日&#xff0c;全球爆发的勒索病毒WannaCry借助高危漏洞“永恒之蓝”在世界…

勒索病毒应急措施及防护方案

本文共7916字 阅读时间大概15分钟 随着国家在政府、企业、教育及医疗等行业“互联网”战略的不断推进&#xff0c;各个行业在逐渐数字化、网络化、智能化、逐步拥抱产业互联网化的大浪潮过程中&#xff0c;也逐渐暴露出一系列网络安全问题。勒索病毒也乘机发难&#xff0c;疯狂…

Linux系统使用steamplay完美运行巫师之昆特牌:王权的陨落(Thronebreaker:The Witcher Tales)

问题描述 使用steamplay运行巫师之昆特牌&#xff1a;王权的陨落&#xff0c;打开游戏会出现黑屏&#xff0c;无法进行游戏的情况。 注意&#xff1a; 此问题不仅在linux上存在&#xff0c;部分Windows系统也会出现此问题&#xff0c;是由于游戏依赖了Media Foundation DLL。因…