Unity之OpenXR+XR Interaction Toolkit实现 移动和转向

news2025/1/14 18:43:51

一.前言

我们知道,在VR游戏中,我们除了可以通过传送来移动之外,还可以通过手柄的遥感进行移动,那么接下来,我们就介绍一下如果通过XR Interaction Toolkit来实现遥感控制任务移动和旋转

二.准备工作

我们需要准备好Unity2021工程和环境配置
有了前文:Unity之OpenXR+XR Interaction Toolkit基本配置的介绍,我们就不在详细说明这些了,大家自行复习。

流程简述:
我们新建一个3D(URP)工程
然后通过PackageManager安装XR Interaction ToolKit插件。
配置好XR Interaction Toolkit的Preset
新建一个3D场景

准备工作完毕
在这里插入图片描述

三.瞬间转向

我们通过菜单GameObject->XR->Locomotion System创建一个LocomotionSystem位移系统
在这里插入图片描述
创建完毕后,我们可以看到Locomotion System的对象上有3个组件:
在这里插入图片描述
三个组件分别是:
LocomotionSystem:用于运动提供者xxxxProvider控制对 XR Origin 的访问。XR Origin运行自动赋值
TeleportationProvider:传送提供者,负责根据用户请求将XR Origin传送到指定为止。
SnapTurnProvider:旋转提供者,允许用户使用输入系统动作的2D轴输入来控制人物XR Origin的旋转。

没错,我们的目的就是要使用VR手柄的2D轴来控制人物的旋转,正好使用SnapTurnProvider组件即可。
我们可以看到它有两个属性分别是:LeftHandSnapTurnAction和RightHandSnapTurnAction,这两个属性就是设置用于旋转的InputSystem。我们只赋值右手的Action即可,因为左手的遥感轴还要用于人物的移动。
如下图所示:
在这里插入图片描述
运行游戏,我们就会发现有手柄已经可以控制人物的旋转了。每次旋转角度是45度。这个角度我们可以通过修改SnapTurnProvider的Turn Amount来调节
其他参数:
Turn Amount:每次旋转角度
Debounce Time:两次旋转的等待事件
EnableTurnLeftRight:是否启用左转和右转
EnableTurnAround:启用180度急转弯
DelayTime:初始化输入系统后的第一个延迟

四.持续转向

刚才我们使用SnapTurnProvider是每次旋转一个固定角度,如果我们想平滑的持续转向,那么可以把SnapTurnProvider替换为ContinueTurnProvider,如下图所示:
我们同样勾选RightHandTurnAction并赋值Action
Turn Speed:持续转向的速度
在这里插入图片描述
注意:这种转向方式,非常容易使人眩晕,谨慎使用。

五.移动

有了上面的旋转提供者Provider,我们很容易举一反三,是不是还有移动提供者Provider,没错,XR Interaction Toolkit给我们提供了Continue Move Provider组件,帮助我们实现移动的功能。
我们同样在LocomotionSystem游戏对象上面添加ContinueMoveProvider组件,并且选中LeftHandMoveAction给左手设置Action,通过左手的遥感控制人物移动。
如下图所示:
在这里插入图片描述
其他参数:
Move Speed:向前移动的速度,以每秒为单位
Enable Strafe:控制是否启用横向移动。
Enable Fly:控制是否启用飞行(无约束运动)。这会覆盖useGravity。
Use Gravity:在使用CharacterController时重力是否影响此提供者。仅在enableFly为false时适用
Gravity Appliction Mode:控制重力何时开始生效。
ForwardSource:定义前向的源转换。

好了,运行游戏,我们就可以使用左手控制移动,右手控制旋转了。

六.Character Controller

虽然目前我们的人物是可以移动和旋转了,但是人物和场景物体之间是没有碰撞的,如果我们想实现人物和场景物体发生碰撞,做到不穿透模型,我们可以尝试给XR Origin添加Character Controller。
Character Controlle是Unity原生的一个角色控制器组件,类似与碰撞+刚体。是Unity专门为了开发者制作第一人称控制提供的。我们添加到
如下图所示:
在这里插入图片描述
这样我们的人物移动时就不会穿透场景模型了。
在这里插入图片描述

七.Character Controller动态高度

虽然我们给XR Origin添加了Character Controller,但是Character Controller的高度是固定不变的,但我们在XR世界中是可以下蹲和站立的,所以这时Character Controller的高度显然就不准确了,好在XR interaction Toolkit给我们提供了Character Controller Driver组件,允许我们根据头盔的高度动态调节Character Controller的高度。
我们把Character Controller Driver组件添加到LocomotionSystem上面即可,它会自动获取当前游戏对象上的MoveProvider。当然,也可以提前给LocomotionProvider赋值Continue Move Provider组件。注意,不要拖拽整个Locomotion System对象,因为LocomotionSystem上面有好几个Provider,这里必须指定为Move Provider才行。
如下图所示:
在这里插入图片描述
注意,Character Controller Driver更新Character Controller的高度不是特别及时,只有在人物位移时才会刷新Character Controller的高度。

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

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

相关文章

C. Maximum Subrectangle(思维 + 考察两个数组相乘得到的矩阵的含义)

Problem - C - Codeforces 给定两个正整数数组 a 和 b,长度分别为 n 和 m。 定义矩阵 c 为一个 nm 的矩阵,其中 ci,jai⋅bj。 你需要在矩阵 c 中找到一个子矩形,使得它的元素之和最多为 x,并且它的面积(即元素总数&a…

考pmp有什么好处?

PMP证书报名条件要求高,这是众所周知的事,那你通过了PMP考试,就证明你是有一定能力的,重要的是,你已经有了至少半年的项目管理经验,并且在你申请考试的前六年内,累计项目管理达三年。 PMP有什么…

【Hadoop-Yarn】Yarn的常用命令

【Hadoop-Yarn】Yarn的常用命令 1)查看任务列表2)杀死任务3)查看日志4)根据 Application 状态过滤任务5)查询 Container 日志6)查看尝试运行的任务7)yarn container 查看容器8)yarn …

Conda 安装 OpenCV

1、conda 切换虚拟环境 activate 虚拟环境名称 温馨提示:查询虚拟环境列表 conda env list 2、conda 查看安装源 conda config --show-sources 我本地安装源为: Index of /anaconda/pkgs/free/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 修改c…

Qt音视频开发44-本地摄像头推流(支持分辨率/帧率等设置/实时性极高)

一、前言 本地摄像头推流和本地桌面推流类似,无非就是采集的设备源头换成了本地摄像头设备而不是桌面,其他代码完全一样。采集本地摄像头实时视频要注意的是如果设置分辨率和帧率,一定要是设备本身就支持的,如果不支持那就歇菜&a…

常规项目风险识别的规范流程和方法

一、识别风险输入 识别项目风险,首先需要对项目管理计划、项目文件、协议、采购文档、事业环境因素、组织过程资产等进行风险识别。 项目管理计划是指:需求、进度、成本、质量、资源、风险等管理计划以及范围基准、进度基准、成本基准。而项目文件指&…

普通2本,去过字节外包,到现在年薪25W+的测试开发,我的2年转行心酸经历...

个人简介 我是一个普通二本大学机械专业毕业,17年毕业,19年转行,目前做IT行业的软件测试已经有3年多,职位是高级测试工程师,坐标上海… 我想现在我也有一点资格谈论关于转行这个话题;希望你在决定转行之前…

Python爬虫-xpath方法爬虫技术分享,更高效,代码简洁!

这里写目录标题 一、获取文档树对象二、文本转化文档树对象文件转化文档树对象节点、元素、属性、内容路径表达式通配符谓语多个路径函数实战信息 ↓ ↓ ↓ 加下方名片找我,直接拿源码还有案例 ↓ ↓ ↓ 一、获取文档树对象 通过Xpath 获取文档的对象,获…

matlab定义函数

1新建文件 首先建立M文件或直接点击(File/New/Function)建立函数文件,其中函数文件的格式是: function [输出变量] 函数名称(输入变量) % 注释 % 函数体 2函数语法 2.1基本语法 function yf(x) %函数的声明 yx^2 就是建立了一个y…

边框虚线滚动动画特效

边框线条效果如上 /*边框虚线滚动动画特效*/.border-animate {background: linear-gradient(90deg, gray 60%, transparent 60%) repeat-x left top/10px 1px,linear-gradient(0deg, gray 60%, transparent 60%) repeat-y right top/1px 10px,linear-gradient(90deg, gray 60%,…

今天面了一个来字节要求月薪23K,明显感觉他背了很多面试题...

最近有朋友去字节面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…

用于2.4GHz ISM频段FHSS解决方案的射频IC

比较了 WLAN 和相关系统。IEEE802.11b FHSS 支持 1.6Mbps 数据传输。MAX2644 SiGe LNA用作2.5GHz频段的PA驱动器和接收器低噪声放大器(LNA)。MAX2240和MAX2242功率放大器(PA)产生~20dBm输出,具有所需的线性度。MAX2754…

EasyRecovery15Mac中文电脑版安装详细操作教程

EasyRecovery是一款操作安全、恢复性比较高的数据恢复工具,小伙伴们可以使用EasyRecovery恢复各种各样被删除的文件、视频、图片等。EasyRecovery还可以支持恢复被格式化的媒体文件,只是使用EasyRecovery恢复时时间较久。如果小伙伴们有误删除的文件需要…

第三十三章 Unity Mecanim动画系统(下)

本章节,我们继续讲解Unity的 Mecannim 动画系统。在上一章节中,我们设置了动画过渡,但是还没有为这些动画过渡设置过渡条件。这个过渡条件需要在“Animator”窗口中设置。这个窗口的左边是用来编辑“动画层”和“动画参数”的。这里的“动画参…

Redis的20种使用场景

本文介绍Redis除了缓存以外的使用场景。 测试源码:https://github.com/vehang/ehang-spring-boot/tree/main/spring-boot-011-redis 1缓存 本文假定你已经了解过Redis,并知晓Redis最基础的一些使用,如果你对Redis的基础API还不了解&#xff…

Kubernetes服务搭建[配置-部署](Kubeadm)

文章目录 **[1 — 7] ** [ 配置K8S主从集群前置准备操作 ]一:主节点操作 查看主机域名->编辑域名1.1 编辑HOST 从节点也做相应操作1.2 从节点操作 查看从节点102域名->编辑域名1.3 从节点操作 查看从节点103域名->编辑域名 二:安装自动填充&…

Android - 动画

一、概念 补间动画 ViewAnimation(Tween):不改变view的位置和属性。属性动画PeopertyAnimation:view的属性根据执行的动画发生真实的改变。帧动画 DrawableAnimation(Frame): 二、补间动画 Vi…

SPSS如何进行使用时间序列模型之案例实训?

文章目录 0.引言1.时间序列数据平稳处理2.指数平滑法建模3.ARIMA建模4.季节性分解 0.引言 因科研等多场景需要进行绘图处理,笔者对SPSS进行了学习,本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结,本文对…

MYSQL用户组管理

1:使用明文密码创建用户 使用密文密码创建用户 1.2 查看用户信息 1.3 重命名用户 rename 1.4 删除用户信息 drop 1.5 修改当前登录用户的密码 set password password(123456); 1.6 修改其他用户的密码 set password for nancylocalhost password(abc123); 1.7…

2023年常见的20道JavaScript面试题及其答案解析,你知道多少

JavaScript中typeof操作符有哪些返回值? 答案:typeof操作符返回字符串数据类型。可能的返回值有:“undefined”、“boolean”、“number”、“string”、“object"和"function”。如何检查一个变量是否为数组? 答案&…