<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>XR on XR技术研习社</title><link>https://www.xrstudy.net/tags/xr/</link><description>Recent content in XR on XR技术研习社</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 15 Apr 2025 17:45:00 +0800</lastBuildDate><atom:link href="https://www.xrstudy.net/tags/xr/index.xml" rel="self" type="application/rss+xml"/><item><title>Interaction Toolkit 新版模拟器快捷键</title><link>https://www.xrstudy.net/posts/xri-simulator-hotkeys/</link><pubDate>Tue, 15 Apr 2025 17:45:00 +0800</pubDate><guid>https://www.xrstudy.net/posts/xri-simulator-hotkeys/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;&#10;&lt;p&gt;在新版 Interaction Toolkit 中，对 XR 模拟器进行了比较大的更新，本文将介绍其中常用的快捷键。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://www.xrstudy.net/images/posts/xri-simulator-hotkeys/01-simulator-overview-panel.png" alt="XR Interaction Simulator 的 Input Selection 面板：左侧 Full Body 与控制器/手部模态切换，右侧是旋转与平移的方向键提示"&gt;&lt;/p&gt;&#10;&lt;h2 id="基本操作快捷键"&gt;基本操作快捷键&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Tab - 在控制器模式和 Full Body 全身控制模式之间切换&lt;/li&gt;&#10;&lt;li&gt;Y - 展开/折叠左下角的 UI 主菜单&lt;/li&gt;&#10;&lt;li&gt;X - 当切换到手柄控制器或手部时，可展开顶部二级菜单&lt;/li&gt;&#10;&lt;li&gt;R - 重置所有部件回到初始状态&lt;/li&gt;&#10;&lt;li&gt;W/A/S/D - 向前/左/后/右移动选中的部件&lt;/li&gt;&#10;&lt;li&gt;Q/E - 上下移动选中的部件&lt;/li&gt;&#10;&lt;li&gt;方向键 - 旋转所选部件&lt;/li&gt;&#10;&lt;li&gt;鼠标右键（按住）- 对当前选中的部件进行旋转&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="控制器手部模拟快捷键"&gt;控制器/手部模拟快捷键&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;左中括号 [ - 选择并控制左手手柄/左手，重复按下可在手柄和手部之间切换&lt;/li&gt;&#10;&lt;li&gt;右中括号 ] - 选择并控制右手手柄/右手，重复按下可在手柄和手部之间切换&lt;/li&gt;&#10;&lt;li&gt;Shift +（快捷键）- 对左手发出动作时的组合键，需要先按住 Shift 然后结合其他快捷键&lt;/li&gt;&#10;&lt;li&gt;T - 模拟按下 Trigger 键&lt;/li&gt;&#10;&lt;li&gt;G - 模拟抓取（Grip）&lt;/li&gt;&#10;&lt;li&gt;1/2 - 模拟手柄控制器上的右手控制器 A 键、B 键或左手控制器 X、Y 键&lt;/li&gt;&#10;&lt;li&gt;空格键 - 用于持续（保持）发出动作，按下 Space 切换 Press/Release 状态&lt;/li&gt;&#10;&lt;li&gt;`（波浪键/反引号键）- 循环切换 Space 键要控制的动作（Trigger、Grip、Primary、Secondary）&lt;/li&gt;&#10;&lt;li&gt;I/J/K/L - 用于模拟摇杆输入：I（向前/瞬移），J（向左转身），K（向后），L（向右转身）&lt;/li&gt;&#10;&lt;li&gt;M - 手部捏合动作（Pinch）&lt;/li&gt;&#10;&lt;li&gt;K - 手部抓取动作（Grab）&lt;/li&gt;&#10;&lt;li&gt;N - 手部戳点动作（Poke）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img src="https://www.xrstudy.net/images/posts/xri-simulator-hotkeys/02-controller-actions-panel.png" alt="Controller Actions 面板：Trigger/Grip/Primary/Secondary 四个动作的按键映射，摇杆 I/J/K/L，底部是 Space 保持动作与反引号循环切换"&gt;&lt;/p&gt;</description></item><item><title>Interaction Toolkit 跳跃功能详解</title><link>https://www.xrstudy.net/posts/xri-jump-provider/</link><pubDate>Wed, 09 Apr 2025 18:00:00 +0800</pubDate><guid>https://www.xrstudy.net/posts/xri-jump-provider/</guid><description>&lt;h2 id="本文主要内容"&gt;本文主要内容&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;介绍实现跳跃功能的 Jump Provider 组件&lt;/li&gt;&#10;&lt;li&gt;如何禁用跳跃功能&lt;/li&gt;&#10;&lt;li&gt;如何将跳跃功能绑定到其他按键上&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="跳跃功能概述"&gt;跳跃功能概述&lt;/h2&gt;&#10;&lt;p&gt;在 Interaction Toolkit 新版本中，如果使用新版本中的 XR Origin 预制体进行场景初始化，跳跃功能会默认集成在预制体中，开发者无需手动实现，程序运行时，通过点击右手手柄控制器的 A 键即可实现跳跃。&lt;/p&gt;&#10;&lt;h2 id="跳跃功能的实现结构"&gt;跳跃功能的实现结构&lt;/h2&gt;&#10;&lt;p&gt;要了解 Interaction Toolkit 中跳跃功能的实现，首先需要了解相关游戏对象的结构。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://www.xrstudy.net/images/posts/xri-jump-provider/01-xr-origin-locomotion-hierarchy.png" alt="XR Origin 下的 Locomotion 节点，Turn、Move、Grab Move、Teleportation、Climb、Gravity、Jump 都是它的子物体"&gt;&lt;/p&gt;&#10;&lt;p&gt;在游戏对象 XR Origin 下的 Locomotion 中，包含了一个名为 Jump 的子物体，在其上挂载了一个名为 Jump Provider 的组件，这是实现跳跃功能的主要组件。值得注意的是，跳跃功能并不仅凭 Jump Provider 实现，在 Interaction Toolkit 的移动架构中，各种移动形式不仅需要各自的 Provider，还需要一个全局管理角色 Locomotion Mediator 来管理协调不同的移动方式。&lt;/p&gt;&#10;&lt;h2 id="如何禁用跳跃功能"&gt;如何禁用跳跃功能&lt;/h2&gt;&#10;&lt;p&gt;并非所有 VR 项目都需要跳跃功能，而默认情况下跳跃功能占用了右手控制器的 A 键。如果项目不需要跳跃或者需要在 A 键上实现其他功能，此时在 Hierarchy 窗口中将 Jump 子物体隐藏即可禁用跳跃功能。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://www.xrstudy.net/images/posts/xri-jump-provider/02-jump-gameobject.png" alt="Hierarchy 中的 Jump 子物体，Inspector 里可以看到它挂的是 Jump Provider 组件"&gt;&lt;/p&gt;</description></item><item><title>Interaction Toolkit 空间键盘（Spatial Keyboard）功能的实现</title><link>https://www.xrstudy.net/posts/xri-spatial-keyboard/</link><pubDate>Sun, 23 Mar 2025 17:04:00 +0800</pubDate><guid>https://www.xrstudy.net/posts/xri-spatial-keyboard/</guid><description>&lt;p&gt;在 VR 应用开发中，文本输入是一个常见需求，而 Unity 的 Interaction Toolkit 提供了空间键盘功能，使开发者能够快速实现这一功能。本文将详细介绍如何在 Unity XR 项目中实现两种形态的空间键盘：全局空间键盘和世界空间键盘。&lt;/p&gt;&#10;&lt;h2 id="准备工作"&gt;准备工作&lt;/h2&gt;&#10;&lt;p&gt;在开始实现空间键盘功能前，需要先导入相关资源包并解决依赖问题。&lt;/p&gt;&#10;&lt;h3 id="导入-spatial-keyboard-资源包"&gt;导入 Spatial Keyboard 资源包&lt;/h3&gt;&#10;&lt;p&gt;首先确保已安装 Unity XR Interaction Toolkit，然后进行以下操作：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;打开 Package Manager&lt;/li&gt;&#10;&lt;li&gt;找到 Interaction Toolkit&lt;/li&gt;&#10;&lt;li&gt;在 Samples 标签页下找到 Spatial Keyboard&lt;/li&gt;&#10;&lt;li&gt;点击 Import 导入资源包&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;img src="https://www.xrstudy.net/images/posts/xri-spatial-keyboard/01-spatial-keyboard-sample-import.png" alt="Package Manager 的 Samples 列表选中 XR Interaction Toolkit，右侧找到 Spatial Keyboard 示例并点击 Import"&gt;&lt;/p&gt;&#10;&lt;p&gt;导入过程中会提示对 TextMesh Pro 的依赖，这是因为键盘上的文字是通过 TextMesh Pro 呈现的。&lt;/p&gt;&#10;&lt;h3 id="解决版本依赖问题"&gt;解决版本依赖问题&lt;/h3&gt;&#10;&lt;p&gt;初次导入后可能会遇到版本依赖问题。如果运行应用程序时出现与 &lt;code&gt;KeyboardOptimizer.cs&lt;/code&gt; 相关的报错，如下图所示：&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://www.xrstudy.net/images/posts/xri-spatial-keyboard/02-keyboardoptimizer-error.png" alt="Console 中的编译错误：KeyboardOptimizer.cs(284,20) error CS0246"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时需要升级 TextMesh Pro 插件：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;打开 Package Manager&lt;/li&gt;&#10;&lt;li&gt;切换到 Unity Registry&lt;/li&gt;&#10;&lt;li&gt;找到 TextMesh Pro&lt;/li&gt;&#10;&lt;li&gt;点击 Update 升级到较新版本（如从 3.0.7 升级到 3.0.9）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;img src="https://www.xrstudy.net/images/posts/xri-spatial-keyboard/03-textmeshpro-update.png" alt="Package Manager 中 TextMesh Pro 的详情页，右上角是 Update to 3.0.9 按钮"&gt;&lt;/p&gt;</description></item></channel></rss>