【unity】Pico VR 开发笔记(基础篇)

这篇具有很好参考价值的文章主要介绍了【unity】Pico VR 开发笔记(基础篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

【unity】Pico VR 开发笔记(基础篇),unity,vr,笔记

XR Interaction Tooikit安装

在packgeManager里搜索XR Interaction Tooikit

【unity】Pico VR 开发笔记(基础篇),unity,vr,笔记

选择版本尽量高版本,不要低于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 )

    【unity】Pico VR 开发笔记(基础篇),unity,vr,笔记

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

    【unity】Pico VR 开发笔记(基础篇),unity,vr,笔记

打包设置

【unity】Pico VR 开发笔记(基础篇),unity,vr,笔记

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

Minimum API Level 选择Android 10.0

Target API Level 选择Automatic(Highest installed)

Scripting Backend 选择IL2CPP

勾选ARM64

【unity】Pico VR 开发笔记(基础篇),unity,vr,笔记

选择: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

【unity】Pico VR 开发笔记(基础篇),unity,vr,笔记

windows下载客户端

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

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

为一体机开启开发者模式

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

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

项目设置

【unity】Pico VR 开发笔记(基础篇),unity,vr,笔记

选择: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脚本。

【unity】Pico VR 开发笔记(基础篇),unity,vr,笔记

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;
        }
    }

补充设置

射线的类型

类型 说明
Staight Line 直线
Projectile Curve 抛物线
Bezier Curve 贝塞尔曲线

修改方法

 rayInteractor.lineType = XRRayInteractor.LineType.ProjectileCurve;

不同类型的射线还有自己的参数可以修改,比如Stailght Line的MaxRaycastDistance(最远射线距离)和ProjectileCurve的Additional Flight Time(射线飞行时间)都可以直接赋值。

有效射线和无效射线

当射线触碰到可触发的UI或者模型时,射线为有效射线,反馈则是使用了ValidColorGradient。否则是使用InvalidColorGradient。

【unity】Pico VR 开发笔记(基础篇),unity,vr,笔记

无效射线和有效射线触碰到有碰撞的模型时同样可以返回RaycastHit,区别在XR射线本身的设置上,比如碰撞Reticle。

实现有效碰撞,需要另外在模型上添加Tracked Device Physics Raycaster脚本等

Reticle (十字线)

Reticle 是射线和模型(UI)碰撞的点。

【unity】Pico VR 开发笔记(基础篇),unity,vr,笔记

添加方法:

在手柄的上找到XR Interactor Line Visual脚本,创建Reticle 预制体后直接添加上。

3、UI触发

触发条件

手柄射线要触发到UI,在完成VR基础场景搭建的前提下,需要挂载两个脚本。

在Canvas上增加Tracked Device Graphic Raycaster

替换EventSystem上的Standalone Input Module为XR UI Input Module(模型上添加的Tracked Device Physics Raycaster脚本也是受XR UI Input Module影响的)

注意事项

Canvas的Order in Layer 最好设置为负值。如果为0或者正值,十字线可能会被UI遮挡。

【unity】Pico VR 开发笔记(基础篇),unity,vr,笔记

为0时

【unity】Pico VR 开发笔记(基础篇),unity,vr,笔记

为-1时文章来源地址https://www.toymoban.com/news/detail-621631.html

到了这里,关于【unity】Pico VR 开发笔记(基础篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pico VR眼镜(XR) Unity开发环境部署及打包教程,包含瞬间移动、转向等基本操作配置

    创建项目 我这里选择的是URP项目。URP对移动端性能比较友好,另外VR平台也不支持HDRP渲染管线。 然后进入unity工具栏-File - Build Settings 点击 Android后,点就Switch Platform将项目转为Android项目 安装依赖包 在unity的工具栏中点击Window-Package Manager,打开包管理器 如图将package来源设置

    2024年02月03日
    浏览(48)
  • Unity PICO VR 入门(一)-Unity导入PICO SKD-PICO Unity Integration SDK

    基于官方教程PICO开发者文档 建议unity 2020.3.48或者更高,并且安装安卓适配,PICO3及以上使用 安装插件SDK Windows Package Manager//插件菜单 在 Package Manager 窗口中,点击 + Add package from disk。 选择 解压好的SDK文件夹中的package.json 文件并导入。Unity PICO SDK下载 不需要账号key也可以安装

    2024年01月19日
    浏览(35)
  • 【PICO】【Unity】【VR】如何对打包后的PICO项目有效Debug

    PICO项目打包后再运行就看不到Console了。当然,会有各类专业的Debug工具。 有一类Debug的工具是Preview形式下展示Debug信息,但是发现Preview成功不见得打包也成功。 打包后也会有一些Debug工具,不过这里我给出自己的简单解决办法。 Unity Console的Debug是展示信息,所以我们也在游

    2024年01月21日
    浏览(34)
  • Unity3D Pico VR 手势识别

    视频链接 本文章使用的 Unity3D版本: 2021.3.6 , Pico SDK 230 ,Pico  OS v.5.7.1 硬件Pico 4 Pico SDK可以去Pico官网下载SDK 第一步:创建Unity3D项目 第二步:导入 PICO Unity Integration SDK         选择 Windows Package Manager。         在 Package Manager 窗口中,点击 + Add package from disk。 第三步:

    2024年02月11日
    浏览(37)
  • Unity3D Pico VR 手势识别 二

    Unity3D Pico VR 手势识别_Cool-浩的博客-CSDN博客 此篇主要讲解怎么手势追踪,手势姿态自定义预制识别,不会导入SDK和配置环境的请看上一章节 SDK 版本:2.3.0 及以上 PICO 设备型号:PICO Neo3 和 PICO 4 系列 PICO 设备系统版本:5.7.0 及以上 PICO SDK 的 “手势追踪” 功能遵循 OpenXR 标准

    2024年02月10日
    浏览(30)
  • 【Unity】VR基础开发2项目准备-VR基本场景构建(OpenXR方向)

    稍等一会儿,编辑器界面就出现了。有可能你的界面布局会有所不同,可以在右上角点击布局,选择Tall,布局切换后在来到左边窗口的左上角,将Game选项卡拖放到下方Dock,这样就可以得到和我一样的布局了。 简单介绍一下。 场景面板是对游戏进行可视化编辑的地方。 Hie

    2024年02月07日
    浏览(35)
  • 【vr】【unity】白马VR课堂系列-VR开发核心基础05-主体设置-手柄对象的引入和设置

    【白马VR课堂系列-VR开发核心基础05-主体设置-手柄对象的引入和设置】 https://www.bilibili.com/video/BV19D4y1N73i/?share_source=copy_webvd_source=7f5c96f5a58b7542fc6b467a9824b04e 上一节引入了XR Origin并进行了初步设置,运行测试时VR场景中的玩家视野已经可以跟随头盔了。 这一节来了解如何将手柄

    2024年02月05日
    浏览(35)
  • 【unity】【VR】白马VR课堂系列-VR开发核心基础04-主体设置-XR Rig的引入和设置

    接下来我们开始引入并构建XR Rig。 你可以将XR Rig理解为玩家在VR世界中的替身。 我们先删除Main Camera,在Hierarchy右键点击删除。 然后再在场景层右键选择XR下的XR Origin。这时一个XR Origin对象就被添加到了Hierarchy。 重设XR Origin的Position和Rotation为原点。 可以注意到这个XR Origin对

    2024年02月06日
    浏览(31)
  • Unity之OpenXR+XR Interaction Toolkit接入Pico VR一体机

    Pico VR 一体机是目前国内比较流行的VR设备之一,PICO成立于2015年3月,于2021年9月并入字节跳动。最新推出的Pico4一体机售价只有2400左右,这让很多家庭都入手了Pico设备,VR一体机的功能包括:VR全景视频,VR运动,VR游戏等等。我们今天就来通过Unity最新的OpenXR标准来接入Pico

    2024年02月04日
    浏览(37)
  • PICO4开发实战一:节奏光剑(VR)(需求文档)

    目的:配置PXR环境,并借助Unity自带的基础模型搭建一个简单的场景。基于该场景实现方块生成、移动和方块和光剑的交互(光剑碰到方块则将方块销毁)。 1、V1版本完成页面 2、V1基本功能需求介绍 (1)配置PXR基础环境创建XR Origin并 绑定光剑 (2)环境搭建 一共六个物体:

    2024年02月15日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包