Unity3DVR开发—— XRInteractionToolkit(PicoNeo3、Oculus quest2)

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

目录

一、开发前的准备

二、基础配置

三、Pico项目配置

 四、添加基础功能

 五、调整功能,摇杆往前推前进



一、开发前的准备

1、为了方便开发,先在Pico开发者平台里下载预览工具

Pico开发者平台https://developer-global.pico-interactive.com/sdk?deviceId=1&platformId=1&itemId=17

unity3d vr,vr

 2、在Pico设备中安装官方提供的apkunity3d vr,vr

 3、在Pico和PC端中都打开Preview Tool,显示连接成功(同一局域网或有线连接

unity3d vr,vr


二、基础配置

1、切换安卓平台

unity3d vr,vr

2、在Package Manager中安装XRInteractionToolkit,并导入官方提供的3个Sample

unity3d vr,vr

3、在Package Manager中安装XRPluginManagement

unity3d vr,vr

4、在Pico开发者平台安装SDKunity3d vr,vr

5、导入官方的Json文件unity3d vr,vr

unity3d vr,vr

6、在XRPlug-inManagementAndroid和PC中勾选PICO

(不勾选PC的Pico,Preview Tool无作用)

unity3d vr,vrunity3d vr,vr

7、将StarterAssets中的预设文件添加为默认unity3d vr,vr


三、Pico项目配置

1、添加XR Origin

unity3d vr,vr

 2、给双手控制器添加预设

unity3d vr,vr

 3、打开Preview Tool测试一下

unity3d vr,vr

这里看到Pico和两个手柄都生效了unity3d vr,vr


 四、添加基础功能

(1)实现移动功能(位移和旋转)

1、添加LocomotionSystem组件(负责运动

2、添加TeleportationProvider组件(负责传送

3、添加SnapTurnProvider组件(负责旋转

(I)LeftHandSnapTurnAction勾选UseReference

(II)RightHandSnapTurnAction取消勾选UseReference

这样就是左手柄摇杆负责旋转

4、添加ContinuousMoveProvider组件(负责移动

(I)LeftHandSnapTurnAction取消勾选UseReference

(II)RightHandSnapTurnAction勾选UseReference

这样就是右手柄摇杆负责位移

 unity3d vr,vr

(2)允许传送的前提准备

1、给地面添加TeleportationArea组件,这样就可以可以移动了。

(3)添加射线指示器

1、新建两个Sphere作为射线指示器,并赋予给XRInteractorLineVisualReticle

unity3d vr,vr

(4)射线改为贝瑟尔曲线unity3d vr,vr

(5)添加人物碰撞

1、添加CharacterControllerCharacterControllerDriver组件

unity3d vr,vr

 (6)实现射线抓取物品(手柄侧键)

1、给物体添加 XRGrabInteractable 组件即可(记得勾选UseDynamicAttach

2、XRRayInteractor负责射线抓取物品,关掉就可以关闭这个功能unity3d vr,vr

(7)把手柄显示出来

1、添加两个射线指示器(DirectInteractor)

unity3d vr,vr

 2、添加预设

unity3d vr,vr

 3、右边手柄同理(复制左手柄并修改预设)

 unity3d vr,vr

 4、把手柄预制体添加给LeftDirectInteractorRightDirectInteractor作为子物体,就可以把手柄显示出来,我这里先用Sphere代替unity3d vr,vr


 ———————————————————分割线————————————————————

———————————————————2023.07.18———————————————————

 五、调整功能,摇杆往前推前进

目前设备我改用Oculus Quest2,继续。unity3d vr,vr


 (1)我把之前的Sphere换成了Oculus手部模型(手部模型带有动画)

unity3d vr,vr


(2)传送

1、添加传送区域(Teleportation Area)脚本,且地面要有碰撞体                 unity3d vr,vr

2、添加传送目标点(Teleportation Anchor),它可以让玩家传送到一个指定的位置和角度。

 unity3d vr,vr

 脚本上的Teleport Anchor Transform就是传送点,Match Orientation调整方向


(3)向前推动摇杆实现传送

目前只有按下手柄的Grip按键,传送才会生效。

(左手为例)这里绑定了 Grip键按下 这个操作unity3d vr,vr

 一般来说,我们操作VR的习惯都是往前推动摇杆触发位移

在XRI Left Hand Locomotion内Teleport Select或Teleport Mode Activate,这两个动作都绑定了Primary2DAxis,表示的是摇杆的坐标位置,推动摇杆摇杆在xy轴上的位置会发生偏移

unity3d vr,vr

 unity3d vr,vr

unity3d vr,vr

 区别在于Directions

···Teleport SelectEverything,意为摇杆推向任何方向都可以激活传送

···Teleport Mode ActivateNorth,意为摇杆推向北方(前方)可以激活传送

···如果我们想通过向前推动摇杆来激活传送,那么我们就选择Teleport Mode Activate。然后我们把XRController中的Select ActionSelect ActionValue都换成Teleport Mode Activate

(4)把射线直线改为曲线

unity3d vr,vr

 (5)实现向前推摇杆才显示射线

思路:控制XRRayInteracter脚本所在游戏物体的显示和隐藏

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.XR.Interaction.Toolkit;

public class TeleportationController : MonoBehaviour
{
    public InputActionProperty m_teleportModeActivate;
    public InputActionProperty m_teleportModeCancel;
    private InputAction teleportModeActivate;
    private InputAction teleportModeCancel;
    public XRRayInteractor teleportInteractor;
    void Start()
    {
        teleportModeActivate = m_teleportModeActivate.action;
        teleportModeCancel = m_teleportModeCancel.action;
        EnableAction();
    }
    private void OnDestroy()
    {
        DisableAction();
    }
    void Update()
    {
        if (CanEnterTeleport())
        {
            SetTeleportController(true);
            return;
        }
        if (CanExitTeleport())
        {
            SetTeleportController(false);
            return;
        }
    }
    private void SetTeleportController(bool isEnable)
    {
        if (teleportInteractor != null)
        {
            teleportInteractor.gameObject.SetActive(isEnable);
        }
    }
    private bool CanEnterTeleport()
    {
        bool isTriggerTeleport = teleportModeActivate != null && teleportModeActivate.triggered;
        bool isCancelTeleport = teleportModeCancel != null && teleportModeCancel.triggered;
        return isTriggerTeleport && !isCancelTeleport; //判断是否触发传送且没有按下取消传送的键
    }
    private bool CanExitTeleport()
    {
        bool isCancelTeleport = teleportModeCancel != null && teleportModeCancel.triggered;
        bool isReleaseTeleport = teleportModeActivate != null && teleportModeActivate.phase == InputActionPhase.Waiting;
        return isCancelTeleport || isReleaseTeleport; //判断是否按下取消传送的键或者释放了之前推动的摇杆
    }
    private void EnableAction()
    {
        if (teleportModeActivate != null && teleportModeActivate.enabled)
        {
            teleportModeActivate.Enable();
        }
    }
    private void DisableAction()
    {
        if (teleportModeActivate != null && teleportModeActivate.enabled)
        {
            teleportModeActivate.Disable();
        }
    }
}


脚本解释:

(I)Input Action Asset 中有一个 Teleport Mode Cancel 的动作,绑定的是“按下 Grip 键”这个操作,也就是按下手柄的 Grip 键可以取消传送,我们也将这个功能加入脚本。unity3d vr,vr

(II)触发传送(显示传送射线)的条件:向前推动手柄摇杆,并且没有按下 Grip 键

(III)不显示传送射线的条件:按下 Grip 键或者手柄的摇杆处于原始的位置(向前推动摇杆并且释放最终也是回到了原始位置)

(IV)EnableAction 的作用:InputAction 类的变量需要调用它的 Enable 方法后才能被激活。

(6)重新调整一下层级,LeftHandController添加TeleportationController,并把XRRayInteractor取消激活(因为是控制游戏物体的显隐,所以LeftHandControllerXRRayInteractor脚本不能挂载到同一物体上)。unity3d vr,vr

unity3d vr,vr

同时把Teleport InteractorXRControllerEnable Input Tracking关闭,避免和父物体冲突(手部模型的父物体必须要有XRController(Action-based)脚本,并且要开启Enable Input Tracking)。

TeleportationController脚本仅仅是用于显示和隐藏射线,真正触发传送的还是Teleport Interactor物体上的XRController中的Select Action

六、UI篇

1、先创建一些世界空间的UI,并给Canvas添加脚本Tracked Device Graphic Raycaster

unity3d vr,vr

2、这一步我们开始制作用于UI射线的射线。分别在LeftHand Controller RightHandController 下创建 UI Ray Interactor 游戏物体。

3、可以复制Teleport Interactor,UI的射线改成直线 StraightLine

4、可以删除掉XRControllerTeleport Interactor需要保留XRController是因为改了摇杆往前推瞬移,需要修改XRController,而UI射线可以沿用父物体的XRControllerunity3d vr,vr

 5、过滤UI射线的目标。我们的UI射线只针对UI,如果不设置层级的话这条射线也会和位移射线冲突,所以需要调整到UI层级。同理位移的射线需要筛掉UI层级

 unity3d vr,vr

 6、另外,现在我们的UI射线是一直存在的。我们可以优化一下,手部如果没有指向UI,那么不显示射线,当射线照射到UI上的时候才能显示。这里实现方法很简单:只需要把未激活时候的颜色透明度改为0就好了。

unity3d vr,vr

 7、改变射线发射位置unity3d vr,vr

 unity3d vr,vr

 文章来源地址https://www.toymoban.com/news/detail-603425.html

到了这里,关于Unity3DVR开发—— XRInteractionToolkit(PicoNeo3、Oculus quest2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Unity3D日常开发】Unity3D中协程的使用

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 最近有小伙伴问协程怎么用、怎么写,我也是会用会写,但是原理不是很明白。 学习了一下,总结出

    2024年02月12日
    浏览(43)
  • 【Unity3D编辑器开发】Unity3D中实现查看键盘对应KeyCode值面板【方便开发】

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 在开发中,会遇到要使用监控键盘输入的KeyCode值来执行代码的情况。 比如说: 但是,如果是一些不常

    2024年02月08日
    浏览(52)
  • 【Unity3D日常开发】Unity3D中实现单例模式详解

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 首先,说一下,什么是 单例模式(Singleton) 。 单例模式是设计模式中常见的一种设计模式,目的是为了

    2024年02月02日
    浏览(48)
  • PicoNeo3开发坑点记录(一)☀️PreviewTool工具使用及开发环境快速搭建

    官方链接 你会得到一个.apk文件以及一个.7z压缩文件; 使用USB线将.apk文件复制到VR设备内,在VR设备中直接完成安装(与手机安装应用无异)。 这里提一下,官方文档是提示在设备端用AndroidDebugBridge(ADB)安装APK,不用管。 将.7z文件解压就行 这点很重要 在编辑器中打开Project

    2024年02月01日
    浏览(34)
  • 【Unity3D日常开发】Unity3D中实现不同脚本之间的执行顺序控制

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 首先,来了解一下事件函数的执行顺序,下图是官方给的脚本中事件函数的执行顺序: 众所周知,U

    2024年02月02日
    浏览(40)
  • Unity读书系列《Unity3D游戏开发》——脚本(一)

    脚本在Unity的重要程度不用多说,她是大部分软件的核心组件。 我们将在此篇文章学习脚本模版及其拓展、脚本的生命周期、脚本的执行顺序、脚本序列化,下一篇为脚本编译与调试。 如下图我们可以在Project视图右键进行脚本创建,除了C#脚本,还有两类脚本;Testing用来做

    2024年04月28日
    浏览(40)
  • 【Unity3D编辑器开发】Unity3D中实现Transform快速复制粘贴【非常实用】

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 在开发中,常常会遇到频繁复制粘贴物体的坐标、旋转、缩放的操作。 使用Unity自带的组件复制粘贴比

    2024年02月07日
    浏览(39)
  • Unity3D开发之unity和js通信交互

    官方 方法分享:Unity - 手动:与浏览器脚本的交互 (unity3d.com) 首先需要写一个JS的脚本,主要是调用mergeInto();方法,第一个参数不用变,第二个参数就是JS的方法集合。写完之后将这个文件的后缀改为.jslib,放到Plugins文件夹中  Test  内容: 2.C#(挂在场景 任意物体上) 3.Uni

    2024年02月12日
    浏览(31)
  • Unity读书系列《Unity3D游戏开发》——基础知识

    本篇对应标题书籍的第一章基础知识,也就是unity的基本常识和工作流的说明。 Unity目前用于创建2D和3D游戏、模拟应用程序、可视化体验以及其他虚拟现实(VR)和增强现实(AR)应用,游戏工业两开花。 Unity初版是在2005年发布的,开始时用unity3.X、4.X这样的名称进行版本更新

    2024年01月18日
    浏览(50)
  • Unity3D开发之OnPointerClick事件

    OnPointerClick是unity事件系统自带的点击推送事件。继承IPointerClickHandler接口,并在脚本中实现接口,点击挂此脚本的物体系统会调用实现的OnPointerClick函数。 下面说下这个接口的缺陷。当我们要判断是双击物体还是单击物体时,我们要使用PointerEventData里的clickCount。用户双击会

    2024年02月11日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包