Unity之OpenXR+XR Interaction Toolkit实现 传送

news2024/11/28 12:51:13

前言

VR中由于走动比较容易头晕,所以基本上玩家移动都是靠传送,这样用户更加直观,传送过去也不会感觉头晕。
好了,那么我们一起来说实现一下OpenXR的传送功能。

准备

我们新建一个3D(URL)项目,导入XR Interactor Toolki,然后配置好,详细配置见下面两篇文章。

创建XR Origin,配置好XRController的相关参数,和手柄预制体等

新建一个空场景,然后创建一个平面作为地面
如下图所示:
在这里插入图片描述

创建Localmotion System

通过菜单GameObect->XR->Localmotion System创建一个Locomotion System游戏对象,这个对象非常重要,就是它控制着Origin(XR)的移动。它身上有3个组件。

1.Localmotion System组件
Locomotion System对象用于控制对 XR Origin 的移动。它强制一次只有一个Localmotion Provider可以移动 XR Origin。这是唯一控制对 XR Origin 的访问的地方,不建议使用 Locomotion System 的多个实例驱动单个 XR Origin。

2.Teleportation Provider组件
Teleportation Provider负责根据用户请求将 XR Origin 移动到所需位置。

3.ActionBasedSnapTurnProvider组件,
一个运动Provider,是Locomotion Provider的子类,允许用户使用来自输入系统动作的 2D 轴输入来旋转他们的装备。

创建传送点

传送点有两种:
1.TeleportationArea传送区域
2.Teleportation Anchor传送锚点

Teleportation Area

TeleportationArea传送区域,是一个传送目的地,它可以将用户传送到他们在表面上的指定位置。我们可以通过手柄发射射线然后按下Grab键完成传送。

在这里插入图片描述

Teleportation Anchor

Teleportation Anchor传送锚,是传送目的地,它将用户传送到预定的锚点位置和旋转
在这里插入图片描述

现在我们可以试一下传送效果。
在这里插入图片描述

传送抛物线

我们默认使用的是直线射线,不过XR Interactor Toolkit给我们提供了抛物线和贝塞尔曲线个动能。
我们打开手柄上面的 XR Ray Interactor组件,我们找到Raycast Configeration属性,把LineType修改为Projectile Curve类型即可。下面的抛物线的速度,重力加速度等控制着抛物线的远近和弧度,我们先使用默认的。
在这里插入图片描述
看一下场景传送效果:
在这里插入图片描述

辅助瞄准区域

我们知道射线或者抛物线出去之后,我们对于空间的感受是有误差的,所以需要一个抛物线的辅助瞄准区域,来精确的告诉我们,落点在哪里。XR Toolkit的Stater Assets里面给我们提供了一个禁止传送的标线和一个可传送的标线。我们也可以自己创建一个任意几何体如:Sphere球体,去掉碰撞即可,作为自定义标线。
在这里插入图片描述
创建传送瞄准标线有两种方法;
方法一:通过在HandController上面的XR Interactor Line Visual中设置Reticle和Blocked Reticle,这种方法设置好Reticle瞄准标线后,可以在任意Teleportation Area或者Anchor上面显示。
在这里插入图片描述

方法二:通过在Teleportation Area或者TeleportationAnchor上面配置Custom Reticle(自定义标线)。
这种方法设置的属于当前Area自定义的瞄准标线,只在当前这个Area上面显示。会覆盖XR Interactor Line Visual上面的设置的默认Reticle。
在这里插入图片描述
运行场景,我们可以看到效果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/474467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git 撤销add/commit,以及更换源命令

前言:主要是为了自己方便记录,省的每次都查找一下这些命令 1、当我们只是想撤回commit,保留add .的时候,可以用下方代码 git reset --soft HEAD^ 2、当我们想撤回commit以及add .的时候,可以用下方代码 git reset…

Mesh形变算法

前言: 作者正好因为动画、模拟仿真等等的重大需求需要预先研发离散形的模型Mesh的形变算法,并且要验证、研究适用的范围、特别是性能等等,摸着石头过河别喷,毕竟我主要是渲染、动画、引擎的对于计算几何、三维重建不是很熟悉&…

Python小姿势 - Python使用Jupyter Notebook

Python使用Jupyter Notebook Jupyter Notebook是一个开源的Web应用程序,可以用来创建和共享包含 live code,公式,可视化和解释性文本的文档。 安装Jupyter Notebook 首先,确保你安装了正确的Python版本和包管理器(pip&…

(6)elasticsearch的分词器

1 文档规范化(normalization) 是为了提高召回率。 停用词 、时态转换、大小写、同义词、语气词。 以下的doc1\doc2,经过normalization之后,在搜索的时候是可以匹配到这两个doc。 我们可以看到,normalization就是把一…

带你认识什么是BMS(电池管理系统)

文章目录 概述BMS的硬件拓扑BMS的电气架构BMS的功能BMS的总压采集(主板功能)BMS的电流采集(主板功能)BMS的电芯电压和温度采集(从板功能)BMS的SOC、SOP和SOH(ASW计算)BSM的绝缘检测B…

ES6新特性(1)

目录 一、字符串扩展 (1)字符串遍历器接口(for...of...) (2)模板字符串 二、字符串新增方法 (1)包含方法 (2)重复方法 (3)补全方…

MySQL数据库,JDBC连接数据库操作流程详细介绍

前言: 在学完 MySQL 和 Java 后,我们通常会尝试使用 Java编译器 连接 MySQL数据库,从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识,因此我把 JDBC 包的下载及导入流程,以及 JDBC 的使用流程…

Arduino驱动L298N控制直流电机的正反转和调速

Arduino驱动L298N控制直流电机的正反转和调速 一、前言二、产品参数三、驱动直流电机三、接线图四、程序五、实验结果总结 一、前言 本模块使用ST公司的L298N作为主驱动芯片,具有驱动能力强,发热量低,抗干扰能力强的特点。LN2&am…

Windows系统自带工具介绍

文章目录 1 Windows系统工具1.1 系统增强工具PowerToys1.1.1 简介1.1.2 使用 1.2 增强版任务管理器 Process Explorer1.2.1 简介1.2.2 使用 1.3 进程监视器 Process Monitor1.3.1 简介1.3.2 使用 1.4 数据恢复神器 Windows File Recovery1.4.1 简介1.4.2 使用 1.5 微软AI识图1.…

Acwing- 835. Trie字符串统计

什么是Trie?Trie是一种高效地存储和查找字符串集合的数据结构。 我想,看下图就明白了 hh~ 在本题中,我们将a-z映射为0-25,然后将其作为数组下标,便于处理。 idx为已使用的节点数量(使用一个节点则idx&…

Go语言——【高质量编程 | 代码规范】

作者:非妃是公主 专栏:《Golang》 博客主页:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录 一、高质量编程定义 二、代码规范1. 代码格式…

Scratch资料

Scratch软件是免费的、免费的、免费的。任何需要花钱才能下载Scratch软件的全是骗子。 1、什么是Scratch Scratch是麻省理工学院的“终身幼儿园团队”开发的一种图形化编程工具。是面向青少年的一款模块化,积木化、可视化的编程语言。 什么是模块化、积木化&…

箭牌家居首次亮相AWE展会,大秀智慧生活新提案

作者 | 曾响铃 文 | 响铃说 2023年作为全面贯彻党的二十大精神开局之年,同时也是后疫情时代的第一年,以科技创新驱动社会发展成为当下首要任务。 特别是科技强国战略的实施落地,对推动经济社会高质量发展有着不可或缺的作用。所谓需求产生…

线性表之单链表(详解)

🍕博客主页:️自信不孤单 🍬文章专栏:数据结构与算法 🍚代码仓库:破浪晓梦 🍭欢迎关注:欢迎大家点赞收藏关注 文章目录 🍥前言🍉链表1. 链表的概念及结构2. 链…

肝一肝设计模式【二】-- 工厂模式

系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 文章目录 系列文章目录前言一、简单工厂模式二、工厂方法模式三、抽象工厂模式写在最后 前言 在实际开发过程中,构建对象往往使用new的方式来构建,但随着…

Nginx搭建以及使用(linux)

1.概念 Nginx是一个高性能的HTTP和反向代理服务器,它可以用来处理静态文件,负载均衡,反向代理等功能。 Nginx的来历是这样的:它是由俄罗斯人伊戈尔赛索耶夫为Rambler.ru站点开发的,第一个公开版本发布于2004年…

java的构造方法

构造方法是 Java中最重要的方法,也是 Java语言中最基本的方法,它直接影响程序的结构。java中不允许重复使用构造方法,但可以重复使用构造函数。 1. Java中只有构造函数可以使用被调用方提供的参数(如: int)…

作为一名8年测试工程师,因为偷偷接私活被····

接私活 对程序员这个圈子来说是一个既公开又隐私的话题,不说全部,应该大多数程序员都有过想要接私活的想法,当然,也有部分得道成仙的不主张接私活。但是很少有人在公开场合讨论私活的问题,似乎都在避嫌。就跟有人下班后…

Linux进程通信——共享内存

共享内存 共享内存原理与概念函数接口的介绍与使用shmgetshmctlshmatshmdt通信 共享内存的特点共享内存的内核结构 system V消息队列(了解)system V——初识信号量信号量的预备概念理解信号量信号量的接口与结构 IPC资源的组织方式 共享内存 原理与概念…

在 Edge 中安装 Tampermonkey 的步骤

以下是在 Edge 中安装 Tampermonkey 的步骤: 目录 1. 打开 Edge 浏览器,进入 Tampermonkey 官网:[https://www.tampermonkey.net/](https://www.tampermonkey.net/)。2. 点击页面上方的“下载”按钮,选择“Microsoft Edge”选项。…