第 05 课
实现场景漫游
本课将带你完成虚拟博物馆的场景漫游:先理解移动系统,再实现地面瞬移、移动与转身设置,并通过碰撞体阻止体验者穿过墙体、展台和座椅。
让体验者安全地走进虚拟博物馆
从移动原理出发,完成瞬移设置、移动方式选择和防穿墙处理,再用模拟器与 PICO 验证完整体验。
学完你将能够
学习目标
- 说清移动提供器、移动中介器、身体变换执行器和玩家根对象之间的关系。
- 为地面设置瞬移区域与交互层,使手柄射线能够选择有效落点。
- 根据体验需要切换连续移动、瞬移、连续转身和步进转身。
- 为墙体、展台和座椅设置碰撞范围,完成防穿墙效果。
开始操作前
准备工作
- 打开上一课完成的虚拟博物馆项目,并确认玩家根对象和地面对象可以正常使用。
- 确认项目已经导入 XR 交互工具包的入门资源,玩家根对象下可以看到移动系统。
- 使用模拟器时,准备好左右方括号、Shift 键以及 I、J、K、L 键。
- 使用 PICO 串流体验时,清理身边障碍物并留出安全活动空间。
本课学习路线
按照学习模块逐步完成
每个模块都包含理解、跟随操作和独立实践。先理解,再动手
理解移动系统
移动不是某一个组件单独完成的。先看懂移动请求怎样传递,再到自己的项目中找到对应对象。移动是多个组件共同完成的
移动系统(Locomotion)负责处理体验者的位置和朝向变化。连续移动、瞬移、攀爬和跳跃都会先提出移动请求,再由系统决定是否执行。
多种移动方式不能同时争抢控制权。例如,体验者正在瞬移时,连续移动不应该同时改变位置。
- 移动提供器:提出一种具体的移动请求。
- 移动中介器:统一协调并决定当前请求是否可以执行。
- 身体变换执行器:把位置或朝向变化真正应用到体验者身上。
- 玩家根对象:承载头戴设备和左右手柄,最终发生移动。

沿箭头阅读:移动提供器提出请求,移动中介器决定是否允许,身体变换执行器把结果应用到玩家根对象。
点击图片可以查看完整截图一次移动请求怎样完成
- 01
某个移动提供器提出移动请求。
- 02
移动中介器根据当前状态批准或拒绝请求。
- 03
请求获得批准后,系统创建位置或朝向的变换指令。
- 04
身体变换执行器执行这条指令。
- 05
变化应用到玩家根对象,体验者随之移动或转身。
在项目中找到移动系统
- 01
在层级窗口中找到玩家根对象 XR Origin。
- 02
展开 XR Origin,再展开 Locomotion。
- 03
依次找到 Turn、Move、Teleportation 和 Gravity。
- 04
选择 Move,观察它使用的移动提供器和输入来源。

左侧是 Locomotion 下的移动子对象,右侧是 Move 的主要属性。本课重点使用 Turn、Move、Teleportation 和 Gravity。
点击图片可以查看完整截图Locomotion 下的移动子对象
先知道每个子对象负责什么,再调整本课需要的功能。
左右滑动表格,可查看完整内容
| 子对象 | 作用 | 本课关注点 |
|---|---|---|
| Turn | 控制向左或向右转身 | 比较连续转身与步进转身 |
| Move | 控制连续移动 | 检查横向移动与重力设置 |
| Grab Move | 通过抓取空间移动 | 认识它在移动系统中的位置 |
| Teleportation | 控制瞬移 | 完成地面瞬移 |
| Climb | 控制攀爬 | 认识它在移动系统中的位置 |
| Gravity | 让体验者受到重力影响 | 观察座椅带来的高度变化 |
| Jump | 控制跳跃 | 认识它在移动系统中的位置 |
轮到你操作
在自己的项目中找到移动系统,并确认主要对象完整。
- 能够展开 XR Origin → Locomotion。
- 能够指出 Turn、Move 和 Teleportation 分别负责什么。
- 选择 Move 后,能够在属性窗口中找到移动速度和横向移动选项。
舒适地到达目标位置
完成地面瞬移
连续移动适合熟悉虚拟现实的体验者,瞬移更重视舒适度。接下来让地面成为可以被手柄射线选择的落点。为什么虚拟现实项目常用瞬移
连续移动时,眼睛看到身体正在前进,但真实身体没有产生相同的运动感觉。视觉与身体感觉不一致时,部分体验者容易感到不适。
瞬移会省略中间的移动画面:先选择落点,松开摇杆后立即到达目标位置。它更适合展馆参观和初次体验虚拟现实的学生。
给地面添加瞬移区域
- 01
在层级窗口中选择地面对象 Floor。
- 02
在属性窗口底部点击 Add Component,也就是“添加组件”。
- 03
搜索 teleport。
- 04
选择 Teleportation Area,也就是“可以瞬移到的区域”。

确认当前选择的是 Floor,然后在添加组件窗口中选择 Teleportation Area。
点击图片可以查看完整截图瞬移相关对象与属性
瞬移需要手柄和地面共同配合,下面的设置缺一不可。
左右滑动表格,可查看完整内容
| 对象或属性 | 中文含义 | 本课设置 | 作用 |
|---|---|---|---|
| Floor / Box Collider | 地面与盒形碰撞体 | 保留已有碰撞体 | 承载体验者,避免从地面坠落 |
| Teleportation Area | 瞬移区域 | 添加到 Floor | 让地面成为可以选择的瞬移目标 |
| Teleport Interactor | 瞬移交互器 | 确认左右手柄下已经存在 | 从手柄发出瞬移射线 |
| Interaction Layer Mask | 交互层遮罩 | 选择 Teleport | 限定哪些交互器可以与地面建立瞬移交互 |
| Everything | 允许全部交互层 | 本课不选择 | 范围过宽,可能让其他交互误选地面 |
设置传送交互层
- 01
找到 Teleportation Area 中的 Interaction Layer Mask。
- 02
把交互层设置为 Teleport。
- 03
确认手柄下的 Teleport Interactor 也包含 Teleport。
- 04
不要把它与 Unity 窗口顶部用于渲染和物理分组的普通 Layer 混淆。

把地面的 Interaction Layer Mask 单独设置为 Teleport,让手柄瞬移射线只选择正确的落点。
点击图片可以查看完整截图使用右手柄测试瞬移
- 01
按右方括号键 ],取得右手柄控制权。
- 02
按住 I,模拟向前推动右手柄摇杆。
- 03
按住鼠标右键并移动鼠标,让射线指向地面。
- 04
看到射线变为可用的蓝色后松开 I。
- 05
确认体验者立即到达选择的位置。
轮到你操作
独立完成地面瞬移,并用一次成功和一次失败的落点进行比较。
- 蓝色射线可以选择地面,松开摇杆后能够到达落点。
- 射线指向无效位置时会变为红色。
- 能够根据射线颜色判断应该检查地面组件还是交互层。
为不同体验选择合适方式
设置移动与转身方式
移动与转身没有唯一正确的组合。先理解每个选项,再根据舒适度和操作习惯配置左右手柄。四种常用方式
连续移动会让体验者平滑前进;瞬移会直接到达目标位置。连续转身按设定速度旋转;步进转身则每次转过一个固定角度。
容易产生不适时,可以优先使用瞬移和步进转身。熟悉虚拟现实操作后,再尝试连续移动与连续转身。
- 连续移动:开启 Smooth Motion Enabled。
- 瞬移:关闭 Smooth Motion Enabled。
- 连续转身:开启 Smooth Turn Enabled。
- 步进转身:关闭 Smooth Turn Enabled。
找到手柄移动设置
- 01
在层级窗口中选择 Left Controller 或 Right Controller。
- 02
找到 Controller Input Action Manager,也就是“手柄输入管理器”。
- 03
展开 Locomotion Settings,也就是“移动设置”。
- 04
比较左右手柄的连续移动与连续转身选项。

图中右手关闭了连续移动,因此使用瞬移;同时开启了连续转身。
点击图片可以查看完整截图移动与转身属性对照
在左右手柄的 Controller Input Action Manager 中找到这些选项。
左右滑动表格,可查看完整内容
| 属性 | 勾选时 | 不勾选时 | 需要注意 |
|---|---|---|---|
| Smooth Motion Enabled | 使用连续移动 | 使用瞬移 | 可以让左右手采用不同方式 |
| Smooth Turn Enabled | 使用连续转身 | 使用固定角度步进转身 | 容易不适时优先尝试步进转身 |
| Near Far Enable Teleport During Near Interaction | 抓取或操作物体时仍可移动 | 近距离交互时暂停瞬移 | 根据交互任务决定是否开启 |
| Enable Strafe | 允许摇杆左右横移 | 不使用左右横移 | 可能占用连续转身需要的左右输入 |
| Turn Amount | — | 步进转身的单次角度 | 常用值为 45° |
| Turn Speed | 连续转身的速度 | — | 数值越大,旋转速度越快 |
模拟器手柄按键
先取得对应手柄控制权,再模拟摇杆输入。
左右滑动表格,可查看完整内容
| 操作 | 右手柄 | 左手柄 |
|---|---|---|
| 取得手柄控制权 | ] | [ |
| 向前推动摇杆 | I | Shift + I |
| 向后推动摇杆 | K | Shift + K |
| 向左拨动摇杆 | J | Shift + J |
| 向右拨动摇杆 | L | Shift + L |
轮到你操作
分别调整左右手柄,并用模拟器比较不同组合。
- 先测试左手连续移动、右手瞬移。
- 分别体验连续转身和 45° 步进转身。
- 开启和关闭 Enable Strafe,观察左右摇杆输入的变化。
- 选择一组自己操作舒适的移动与转身方式。
让场景边界符合真实空间
建立防穿墙碰撞
模型看起来像墙,不代表它一定能够阻挡体验者。真正定义不可穿越范围的是碰撞体。模型外观与碰撞范围是两件事
没有碰撞体时,体验者仍可能穿过墙面、展台和座椅。碰撞体可以理解为包在模型外面的透明边界。
Is Trigger 表示“是否作为触发器”。触发器只感知进入和离开,不能像实体墙壁一样阻挡体验者,因此本课保持不勾选。
给中间墙添加盒形碰撞体
- 01
在层级窗口中选择中间墙对象 Wall2。
- 02
点击 Add Component。
- 03
搜索并添加 Box Collider,也就是“盒形碰撞体”。
- 04
确认 Is Trigger 没有勾选。

确认当前选择的是 Wall2,再添加 Box Collider。完成后检查 Is Trigger 是否保持关闭。
点击图片可以查看完整截图调整碰撞范围并避开门洞
- 01
在 Box Collider 中点击 Edit Collider,进入碰撞范围编辑状态。
- 02
点击场景窗口右上角坐标轴中间的立方块,切换到正交显示。
- 03
从正面、侧面或顶部观察墙体。
- 04
拖动碰撞体各个面的控制点,让边界只覆盖实体墙面。
- 05
检查底部、顶部和左右边界,确保门洞没有被覆盖。

先使用右上角坐标轴切换观察方向,再让碰撞边界贴合实体墙面,不要覆盖两侧入口。
点击图片可以查看完整截图防穿墙相关属性与工具
先理解每个选项的作用,再调整碰撞范围。
左右滑动表格,可查看完整内容
| 属性或工具 | 中文含义 | 本课设置 | 作用 |
|---|---|---|---|
| Box Collider | 盒形碰撞体 | 添加到墙体、展台和座椅 | 用透明的盒形范围阻挡体验者 |
| Is Trigger | 是否作为触发器 | 保持不勾选 | 勾选后只感知进入,不能像实体墙一样阻挡 |
| Edit Collider | 编辑碰撞体 | 拖动各面控制点 | 让碰撞范围贴合模型并避开入口 |
| Orthographic | 正交显示 | 从正面、侧面或顶部观察 | 取消近大远小,更容易判断边界是否平齐 |
| Wireframe | 线框模式 | 调整一体式四周墙面时使用 | 透过模型观察多个碰撞体的位置 |
| 多个 Box Collider | 同一对象上的多个碰撞范围 | 四面墙分别使用一个 | 避免用一个实心大盒子封住整个房间 |
一体式四周墙面需要多个碰撞体
如果四面墙属于同一个整体模型,不能用一个巨大的盒形碰撞体包住整个房间,因为盒形碰撞体代表一个实心区域。
更合适的方法是在同一对象上添加四个盒形碰撞体,让每一个薄盒子分别贴住一面墙。调整时可以使用顶部正交视图和线框模式。
补全四周墙面、展台和座椅
- 01
为四周墙面添加四个盒形碰撞体,分别覆盖四个方向。
- 02
确认房间内部和门洞没有被碰撞范围误封。
- 03
同时选择六个 Stand 展台对象并添加盒形碰撞体。
- 04
同时选择四个 Seat 座椅对象并添加盒形碰撞体。
- 05
逐个查看范围,过大或过小时再单独调整。
轮到你操作
完成整个展馆的防穿墙设置,并逐项验证。
- 中间墙能够阻挡体验者,门洞仍可正常通过。
- 四周墙面分别具有独立的碰撞范围。
- 体验者不能直接穿过展台。
- 座椅具有碰撞范围,靠近时可以观察到轻微的高度变化。
把所有设置连起来
综合验证与总结
最后从入口完整走一遍展馆,确认移动、瞬移、转身和碰撞能够一起正常工作。按顺序完成一次展馆巡游
- 01
切换到左手柄,测试连续移动或左手当前使用的移动方式。
- 02
接近中间墙,确认体验者被正确阻挡。
- 03
从门洞穿过,确认入口没有被碰撞范围封住。
- 04
接近四周墙面,确认四个方向都能正确阻挡。
- 05
接近展台,确认不能直接穿过。
- 06
接近座椅,观察体验者是否出现轻微高度变化。
- 07
切换到右手柄,测试瞬移射线。
- 08
确认蓝色射线可以选择地面,松开摇杆后能够到达目标位置。
- 09
分别测试连续转身和步进转身,确认结果与手柄设置一致。
常见现象与处理方法
按照现象查找原因,不必反复修改无关设置。
左右滑动表格,可查看完整内容
| 现象 | 可能原因 | 处理方法 |
|---|---|---|
| 瞬移射线一直是红色 | 地面没有瞬移区域,或交互层不匹配 | 确认 Floor 已添加 Teleportation Area,并把交互层设为 Teleport |
| 射线是蓝色但没有移动 | 没有松开摇杆,或当前控制的不是右手柄 | 先按 ] 选择右手柄,指向目标后松开 I |
| 体验者仍然穿过墙壁 | 墙体没有碰撞体、范围不正确,或使用了全身模式 | 调整 Box Collider,再切换到具体手柄进行验证 |
| 门洞无法通过 | 墙体碰撞范围覆盖了门洞 | 进入 Edit Collider,缩小碰撞范围 |
| 连续转身没有生效 | 摇杆左右输入被横向移动占用,或修改了错误手柄 | 检查 Enable Strafe、Smooth Motion Enabled 和当前手柄对象 |
| 多个碰撞体很难选中 | 控制点互相重叠 | 使用顶部正交视图和线框模式,选错后按 Ctrl + Z |
本课成果清单
逐项确认完成后,你就已经建立了完整的场景漫游能力。
- 能够解释移动请求从提出到执行的基本流程。
- 能够使用蓝色瞬移射线选择地面并到达目标位置。
- 能够切换连续移动、瞬移、连续转身和步进转身。
- 墙体、展台和座椅都能正确阻挡体验者。
- 能够根据常见现象快速找到需要调整的设置。
本课小结
场景漫游不仅要让体验者“能够移动”,还要兼顾舒适性和空间真实性。瞬移可以降低持续移动带来的不适,正确的碰撞范围则让体验者遵守展馆边界。
完成本课后,你已经为后续的文物交互、手部交互和界面操作准备好了可靠的移动基础。
把知识变成作品
本课练习
请按顺序完成以下任务,并保存自己的学习成果。- 01
把左右手都设置为瞬移,分别验证射线、落点和转身方式,然后恢复为自己需要的配置。
- 02
选择一面含有门洞的墙,调整碰撞范围,使墙面能够阻挡体验者,同时保证入口可以正常通过。
- 03
完成一次从入口出发的展馆巡游,记录一个还可以继续优化的移动体验问题。
把本课进度保存下来
登录后可以保存浏览内容、有效学习时间、完成状态和答题参与记录。