【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

pico 手柄射线,unity3d,VR,unity,vr,笔记

XR Interaction Tooikit安装

在packgeManager里搜索XR Interaction Tooikit

pico 手柄射线,unity3d,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 )

    pico 手柄射线,unity3d,VR,unity,vr,笔记

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

    pico 手柄射线,unity3d,VR,unity,vr,笔记

打包设置

pico 手柄射线,unity3d,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

pico 手柄射线,unity3d,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

pico 手柄射线,unity3d,VR,unity,vr,笔记

windows下载客户端

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

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

为一体机开启开发者模式

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

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

项目设置

pico 手柄射线,unity3d,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脚本。

pico 手柄射线,unity3d,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。

pico 手柄射线,unity3d,VR,unity,vr,笔记

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

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

Reticle (十字线)

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

pico 手柄射线,unity3d,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遮挡。

pico 手柄射线,unity3d,VR,unity,vr,笔记

为0时

pico 手柄射线,unity3d,VR,unity,vr,笔记

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

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

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

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

相关文章

  • Unity-Pico高级开发(一)按键状态获取,射线碰到物体变色,射线末端小圆点

    Unity-Pico高级开发(一)按键状态获取,射线碰到物体变色,射线末端小圆点

    目录 效果展示 前言 获取按键状态 射线碰到物体变色 射线末端小圆点 Unity-Pico高级开发(一)按键状态获取,射线碰到物体     picoXR为Unity提供的Unity XR SDK是基于Unity XR实现的各个功能,针对手柄和头盔的各个按键摇杆事件的获取,均是采用的Unity XR提供的方法。目前UnityXR只

    2024年04月28日
    浏览(172)
  • Unity+Pico 手柄按键控制

    Unity+Pico 手柄按键控制

    一、定义手柄按键API 1、InputDevices.GetDeviceAtXRNode,通过XRNode获取对应的设备; 2、XRNode是一个枚举类型,包含LeftEye、RightEye、CenterEye、Head、LeftHand、RightHand、GameController、TrackingReference、HardwareTracker; 3、TryGetFeatureValue,得到某个特性的值; 4、CommonUsages定义了用于从XR.InputDevi

    2024年02月11日
    浏览(12)
  • Unity+Pico 响应射线事件

    1、添加组件 为了让场景内的物体能够响应射线的操作,需要在该物体上添加“XR Simple Interactable”组件,并对射线的交互事件编写脚本看,最常用的是“Hover”和“Select”事件。 2、编写脚本 在编写脚本时,需要引入UnityEngine.XR.Interaction.Toolkit命名空间,另外,从步骤1中的截图

    2024年02月12日
    浏览(39)
  • Unity中PICO中手柄按键返回值

    Unity中PICO中手柄按键返回值

    在上篇文章中,我们实现了PICO中 隔空取物 和 接触抓取。 Unity中PICO实现 隔空取物 和 接触抓取物体 在这篇文章中,我们来实现 手柄C#脚本交互。 手柄头戴输入映射 按键Unity XR 键值菜单键CommonUsages.menuButton: 表示菜单键的激活状态(即是否被按下)。 扳机键CommonUsages.trigg

    2024年04月16日
    浏览(48)
  • 【Unity】【Pico】手柄摇杆控制第一人称移动和旋转

    【Unity】【Pico】手柄摇杆控制第一人称移动和旋转

    背景:开发影院系统 环境:Unity2021.3、PicoNeo3ProEye 描述 :已经在Unity项目中实现第一人称WASD移动和鼠标旋转(代码见我的其他博文) 需求 :希望项目在Pico一体机运行时可以通过手柄摇杆控制(unityxr的基础配置见我的其他博文) 解决 : Locomotion System XR Origin Continuous Move Pr

    2024年01月18日
    浏览(69)
  • 使用U3D、pico开发VR(一)——将unity的场景在设备中呈现

    使用U3D、pico开发VR(一)——将unity的场景在设备中呈现

           最近srtp项目在赶进度,自己之前是在电脑端进行的开发。但是项目是VR端,因此需要重新学习,在此记录一下自己的学习经历。        首先,如何将unity的场景在自己的眼镜中进行呈现呢?        对此,我也找了很多教程,也跟着花了很多时间去做。从国内的

    2024年01月17日
    浏览(8)
  • PIco4发布使用UNITY开发的Vr应用,格式为apk,安装的时候发生解析错误

    PIco4发布使用UNITY开发的Vr应用,格式为apk,安装的时候发生解析错误

    参考链接 : adb install APK报错Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]_调用者不被允许测试的测试程序_小龙在山东的博客-CSDN博客 Pico Developer Answers 完成项目配置 - PICO 开发者平台 如何将apk、obb文件打包至pico设备中 - 掘金 Requires newer sdk version #30 (current version is #28) · Issue #633

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

    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日
    浏览(10)
  • Pico VR眼镜(XR) Unity开发环境部署及打包教程,包含瞬间移动、转向等基本操作配置

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

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

    2024年02月03日
    浏览(12)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包