第 02 课
项目初始化
一个可以浏览的三维场景还不是 VR 应用。Unity 需要依次认识目标平台、交互工具、设备接口、玩家对象和实体地面。本课统一使用 Unity 2022.3.62f3c1 与 XR Interaction Toolkit 3.1.2,完成这条初始化链,并学会根据现象找到对应的设置位置。
把美术场景初始化为可以继续开发的 VR 项目
从完整项目、Android 构建平台和 XR 工具链开始,连接 PICO 4 Ultra,建立玩家、相机、地面与代码编辑环境。
学完你将能够
学习目标
- 说出 Unity、Android、XR Interaction Toolkit、OpenXR 与 PICO 4 Ultra 各自承担的工作。
- 把项目切换为 Android 与 ASTC,并理解 SDK、NDK、OpenJDK 的用途。
- 确认 XRI 3.1.2,导入 Starter Assets 与 XR Device Simulator。
- 确认 PICO OpenXR Plugin 1.4.1,并在 Android 下启用 OpenXR 与 PICO 控制器配置。
- 建立唯一活动的 XR Origin 和头显相机,正确设置追踪原点与后处理。
- 为 Floor 建立实体碰撞边界,并连接能够识别完整 Unity 工程的代码编辑器。
开始操作前
准备工作
- 准备已经解压的虚拟现实博物馆起始项目,根目录中应能看到 Assets、Packages 和 ProjectSettings。
- 使用 Unity 2022.3 LTS 打开项目;本课统一使用的编辑器版本是 2022.3.62f3c1。
- 在 Unity Hub 中为这套编辑器安装 Android Build Support,以及随 Unity 安装的 SDK、NDK 和 OpenJDK。
- 首次打开项目前先保留一份原始副本;如果 Unity 正在导入资源或编译脚本,等待它完成后再继续操作。
本课学习路线
按照学习模块逐步完成
每个模块都包含理解、跟随操作和独立实践。从全局认识每一层
先看懂项目初始化的完整链路
初始化不是连续点击若干选项,而是把项目、平台、工具、设备和场景按依赖关系连接起来。先理解链路,遇到问题时才能找准位置。为什么三维场景还不能直接进入头显
Assets 中的模型、材质和灯光只描述虚拟世界。Unity 还不知道应用要构建成哪种安装包、PICO 手柄的输入怎样进入场景、哪一个对象代表体验者,也不知道地面能否承载玩家。
本课分三个阶段完成九项任务:先打开正确项目并确定 Android 平台,再连接 XRI、OpenXR 和 PICO,最后建立 XR Origin、相机、地面碰撞与代码编辑环境。每一步都为下一步提供条件。
按箭头阅读:项目与平台先就位,XR 工具链随后连接,最后把玩家、场景和开发工具组合成可继续开发的基础。
手机上可左右滑动;点击图片可以查看完整图初始化链路中的六个关键层级
每一层解决一个不同问题。先判断现象属于哪一层,再回到相应设置位置。
左右滑动表格,可查看完整内容
| 层级 | 主要对象 | 解决的问题 | 完成后的现象 |
|---|---|---|---|
| 项目 | Unity、项目根目录、MainScene | 让正确编辑器打开完整项目 | 场景和资源能够正常载入 |
| 平台 | Android、ASTC | 决定应用采用哪套构建工具 | Android 成为活动平台 |
| 交互 | XRI、Input System、Starter Assets | 把输入解释成移动、射线和抓取 | 输入动作与玩家预制体可用 |
| 设备 | XR 插件管理、OpenXR、PICO 扩展 | 让应用启动 PICO 的 XR 运行能力 | PICO 功能与手柄配置可选 |
| 场景 | XR Origin、头显相机、Floor | 建立体验者和可站立空间 | 只有一套活动玩家与相机 |
| 代码 | 外部编辑器、.sln、.csproj | 让编辑器认识项目脚本和依赖 | 双击脚本可打开完整工程 |
画出自己的初始化链
在纸上画出“项目 → Android → XRI → PICO OpenXR → XR Origin → 场景与代码工具”,并为每个方框写一个可以观察到的完成现象。
- 能够说明 XRI 负责交互行为,OpenXR 负责连接 XR 运行环境。
- 能够说明 XR Origin 是场景中的体验者根对象,不是软件包。
- 能够举例说明上游缺失如何影响下游,例如未启用 OpenXR 时头显追踪不会启动。
建立正确的工程起点
打开完整项目并切换 Android 平台
先让 Unity 打开正确目录和主场景,再把资源处理规则切换到 PICO 独立头显使用的 Android 平台。先认清项目根目录
在 Unity Hub 中选择项目时,应选择同时包含 Assets、Packages 和 ProjectSettings 的目录。Assets 保存场景与资源,Packages 记录工具包,ProjectSettings 保存项目级设置。缺少其中任一部分,都不是本课所需的完整项目。
Unity 2022.3 LTS 中的 LTS 表示长期支持版本。本课使用 2022.3.62f3c1,能够让编辑器界面、软件包和后续操作保持一致。
打开 MainScene
- 01
在 Unity Hub 中选择“从磁盘添加项目”,选中项目根目录。
- 02
使用 Unity 2022.3.62f3c1 打开项目,等待资源导入与脚本编译结束。
- 03
在项目窗口进入 Assets/_Scene,双击 MainScene。
- 04
确认层级窗口能看到博物馆环境、灯光和场景对象,然后保存场景。
- 05
若辅助图标遮挡模型,可在场景窗口的 Gizmos 菜单中调小 3D Icons;这只改变编辑器显示,不会删除对象。
Android 工具链分别做什么
PICO 4 Ultra 独立运行 Android 应用,所以 Unity 需要 Android Build Support。SDK 提供 Android 的应用构建与设备工具;NDK 把 Unity 生成的本机代码编译给头显处理器;OpenJDK 为 Android 构建过程提供 Java 环境。三者通常随 Unity 一起安装。
切换平台时,Unity 会按 Android 规则重新处理纹理、着色器和部分资源,因此首次切换可能较慢。ASTC 是移动设备常用的纹理压缩格式,可以在画面质量和显存占用之间取得平衡。
切换为 Android 与 ASTC
- 01
选择 File → Build Settings,在左侧选择 Android。
- 02
若 Android 为灰色,回到 Unity Hub,为同一套编辑器补装 Android Build Support、SDK、NDK 和 OpenJDK。
- 03
把 Texture Compression 设置为 ASTC。
- 04
点击 Switch Platform,等待右下角的资源处理结束。
- 05
再次打开 Build Settings,确认 Unity 标志位于 Android 一侧,ASTC 仍然保留。
Android 初始化常用名词
这些工具共同完成安装包构建,但职责不同。
左右滑动表格,可查看完整内容
| 名称 | 学生可以怎样理解 | 缺少时的常见现象 |
|---|---|---|
| Android Build Support | Unity 的 Android 构建模块 | Build Settings 中 Android 不可用 |
| SDK | Android 应用与设备工具集合 | 无法生成或安装应用 |
| NDK | 把本机代码编译给头显处理器 | 本机代码构建失败 |
| OpenJDK | Android 构建需要的 Java 环境 | Gradle 构建无法启动 |
| ASTC | 面向移动设备的纹理压缩方式 | 纹理体积与显存占用不符合项目预期 |
独立确认工程入口与平台
关闭设置窗口后,再独立找到项目根目录、MainScene 与 Android 构建设置,并说出每个位置解决的问题。
- 项目根目录同时包含 Assets、Packages 和 ProjectSettings。
- 当前打开的是 Assets/_Scene/MainScene。
- Android 已成为活动平台,纹理压缩方式为 ASTC。
固定交互工具版本
确认 XR Interaction Toolkit 3.1.2
XR Interaction Toolkit(XR 交互工具包,简称 XRI)提供射线、移动、抓取和界面交互组件。本课先把工具版本固定下来。软件包和版本号是什么
Package Manager(包管理器)用于安装和管理 Unity 软件包。打开 Window → Package Manager,把来源切换到 Unity Registry,即可找到 XR Interaction Toolkit。
本课统一使用 XRI 3.1.2。版本号更大不等于现在就应该升级,因为新版可能改变组件字段、输入动作和示例预制体,导致页面步骤与自己的工程不同。
读出当前安装状态
- 01
在 Package Manager 中选择 XR Interaction Toolkit。
- 02
确认右侧版本为 3.1.2;若按钮显示 Remove,表示软件包已经安装。
- 03
若项目缺少该包,使用包管理器的按名称添加功能,包名填写 com.unity.xr.interaction.toolkit,版本填写 3.1.2。
- 04
等待安装与脚本编译完成。出现输入系统启用提示时,保存项目并允许 Unity 重新启动。
- 05
不要把其他 XRI 版本的示例资源混入 3.1.2 目录。

观察右侧的包名、版本号与安装按钮。Documentation 和 Changelog 分别用于阅读使用说明与版本变化;本课操作以 3.1.2 为准。
本课统一使用的软件组合
先保持这组版本一致,再进入交互功能开发。
左右滑动表格,可查看完整内容
| 工具 | 版本 | 负责内容 |
|---|---|---|
| Unity | 2022.3.62f3c1 | 编辑、导入与构建项目 |
| XR Interaction Toolkit | 3.1.2 | 射线、移动、抓取与界面交互 |
| Input System | 1.14.0 | 读取并分发头显、手柄和键鼠输入 |
| XR Plug-in Management | 4.5.1 | 管理目标平台的 XR 载入器 |
| OpenXR Plugin | 1.14.3 | 连接 OpenXR 运行环境 |
| PICO OpenXR Plugin | 1.4.1 | 补充 PICO 设备能力与配置 |
解释为什么暂不升级
读出自己的 XRI 版本,并向同学说明:软件包升级前,为什么需要先保留项目副本并确认组件与输入动作的变化。
- 能够读出 XR Interaction Toolkit 3.1.2。
- 能够找到 Documentation 与 Changelog。
- 能够说明软件包版本、示例资源版本必须保持一致。
让 XRI 组件获得输入
导入输入动作与 XR 模拟器
安装 XRI 得到的是交互组件,Starter Assets 则准备了输入动作和玩家预制体,XR Device Simulator 用键盘和鼠标模拟头显与手柄。工具包、输入系统和示例资源怎样配合
Input System(输入系统)把摇杆、按键和头显姿态转换为统一动作;XRI 组件读取这些动作,再执行移动、射线或抓取;Starter Assets 提供已经组织好的动作资源与预制体,减少重复配置。
项目的 Active Input Handling 设为 Both,表示旧输入方式和新输入系统都可以工作;本课的 XR 输入仍由新的 Input System 提供。
只导入本课需要的两组资源
- 01
在 Package Manager 中选择 XR Interaction Toolkit 3.1.2,打开 Samples 标签。
- 02
找到 Starter Assets,点击 Import;若显示 Reimport,表示它已经存在,不要重复覆盖。
- 03
找到 XR Device Simulator,点击 Import,为下一课的电脑模拟操作准备资源。
- 04
等待脚本编译结束,确认控制台没有持续出现的红色编译错误。
- 05
本课不导入与当前初始化无关的演示资源,先保持项目结构清楚。

本图只观察 Starter Assets:右侧显示 Reimport,表示输入动作和玩家预制体已经导入。XR Device Simulator 按同样方式在 Samples 中完成。
两组资源分别提供什么
记住包管理器中的名称和项目窗口中的实际文件名称。
左右滑动表格,可查看完整内容
| 资源 | 主要内容 | 本课要找到的文件 | 用途 |
|---|---|---|---|
| Starter Assets | 默认输入动作与玩家预制体 | XRI Default Input Actions、XR Origin (XR Rig) | 连接头显、手柄和 XRI 组件 |
| XR Device Simulator | 键鼠模拟输入和预制体 | XR Interaction Simulator | 在电脑中模拟头显与左右手柄 |
沿输入链找到三个对象
从手柄输入出发,依次指出 Input System、XRI Default Input Actions 和 XR Origin 预制体怎样把输入送到场景。
- 在 Assets/Samples/XR Interaction Toolkit/3.1.2/Starter Assets 中找到默认输入动作。
- 在 Prefabs 中找到 XR Origin (XR Rig)。
- 在 XR Device Simulator 资源中找到 XR Interaction Simulator。
补充 PICO 设备能力
确认 PICO OpenXR 扩展位于项目中
Unity 的 OpenXR 软件包提供通用接口,PICO OpenXR Plugin 再补充 PICO 4 Ultra 所需的功能组和控制器配置。先有扩展,设置页中才会出现 PICO 选项。先理解工具链中的位置
PICO 4 Ultra 把头显姿态和手柄输入交给 PICO OpenXR 扩展,扩展通过 OpenXR 接入 Unity,再由 Input System 与 XRI 把输入转成移动、射线和抓取。场景中的 XR Origin 最终接收这些结果。
PICO OpenXR Plugin 1.4.1 是本课使用的项目内软件包。它的 package.json 是软件包清单,记录名称、版本和依赖;只有完整文件夹才能被 Unity 正确识别。
从左向右读:设备产生数据,OpenXR 链路把数据交给 Unity,XRI 解释成交互,XR Origin 和场景对象呈现最终行为。
手机上可左右滑动;点击图片可以查看完整图项目内软件包为什么更适合课堂工程
把依赖跟随项目保存,换一台电脑时更容易保持一致。
左右滑动表格,可查看完整内容
| 放置方式 | Unity 怎样找到它 | 项目移动后的情况 | 本课做法 |
|---|---|---|---|
| 项目外部引用 | 记录另一处磁盘路径 | 路径变化后可能失效 | 不作为起始项目的默认方式 |
| 放入项目 Packages | 从项目内部读取 package.json | 软件包随项目一起移动 | 使用此方式 |
根据自己的项目状态完成确认
- 01
在项目的 Packages 目录中找到 PICO OpenXR Plugin,打开 package.json,确认版本为 1.4.1。
- 02
如果 OpenXR 设置中已经能看到 PICO 功能,不要再次覆盖现有软件包。
- 03
如果起始项目确实缺少该包,先退出 Unity,把课程提供的完整 PICO OpenXR Plugin 1.4.1 文件夹放入项目 Packages。
- 04
重新打开项目,等待 Unity 识别软件包并完成脚本编译。
- 05
进入 Package Manager,确认 PICO 软件包可见;随后再进入下一个模块设置 OpenXR。
让软件包能够随项目移动
在文件资源管理器中找到项目 Packages,并向同学说明 package.json 与完整软件包文件夹的作用。
- 能够区分项目根目录中的 Packages 与 Unity 编辑器安装目录。
- 能够读出 PICO OpenXR Plugin 1.4.1。
- 返回 Unity 后,软件包可以识别且没有持续出现的红色编译错误。
让应用真正启动头显能力
启用 Android OpenXR 与 PICO 功能
软件包安装完成后,还要在 Android 平台启用 OpenXR 载入器,并声明 PICO 4 Ultra 的功能组和手柄配置。五个名称各自负责什么
XR Plug-in Management(XR 插件管理)决定应用启动时使用哪个 XR 载入器。载入器可以理解为“真正启动 XR 运行环境的模块”:只安装 OpenXR 软件包但不启用载入器,头显追踪不会自动工作。
OpenXR 提供通用 XR 接口;PICO Support 与 PICO OpenXR Features 以 Feature Group(功能组)的形式打开一组 PICO 能力;PICO4 Ultra Touch Controller Profile 属于 Controller Profile(控制器配置),它描述这类手柄向 OpenXR 提供哪些标准输入。控制器配置不等于课程中的 XRI Default Input Actions,前者描述设备,后者把输入组织成课程动作。
从设备到交互的职责分工
缺少任何一层,都可能表现为头显或手柄没有反应。
左右滑动表格,可查看完整内容
| 层 | 本课选择 | 主要职责 | 容易混淆的地方 |
|---|---|---|---|
| XR 载入器 | Android 下的 OpenXR | 应用启动时连接 XR 运行环境 | 安装包不等于已经启用载入器 |
| Feature Group | PICO Support、PICO OpenXR Features | 成组启用 PICO 设备能力 | 它不是场景中的组件 |
| Controller Profile | PICO4 Ultra Touch Controller Profile | 声明 PICO 4 Ultra 手柄的标准输入 | 它不负责移动逻辑 |
| Input System | XRI 输入动作引用 | 把设备输入分发给动作 | 它不会自动创建玩家 |
| XRI | 3.1.2 交互组件 | 把动作变成移动、射线和抓取 | 它不是设备驱动 |
在 Android 标签完成 PICO 设置
- 01
选择 Edit → Project Settings → XR Plug-in Management。
- 02
点击顶部带 Android 图标的标签;这里表示应用的构建平台,不是开发电脑的系统。
- 03
勾选 OpenXR,等待软件包处理与脚本编译结束。
- 04
进入 OpenXR 的 Android 功能设置,启用 PICO Support、PICO OpenXR Features 和 PICO4 Ultra Touch Controller Profile。
- 05
打开 Project Validation(项目设置提示)。先阅读红色问题与黄色建议的原因,再处理会阻止项目运行的问题。
- 06
离开设置页后重新进入 Android 标签,确认 OpenXR 仍被选中,PICO 功能与 PICO 4 Ultra 控制器配置仍然可见。

聚焦观察 OpenXR 和 PICO XR feature group 两行。完成后还要进入 OpenXR 功能页,确认 PICO 4 Ultra 的控制器配置。
沿设置链说出三个完成现象
从 Android 平台开始,依次说明载入器、PICO 功能组和控制器配置的作用,并在界面中指出它们的位置。
- Android 标签下的 OpenXR 在重新进入页面后仍然被选中。
- PICO 功能组与 PICO4 Ultra Touch Controller Profile 可见。
- Project Validation 中没有阻止运行的红色问题;黄色建议已阅读并理解。
把现实动作映射进场景
建立 XR Origin 与唯一的头显相机
设备链路准备完成后,需要在 MainScene 中加入一个代表体验者的 XR Origin,并让它下面的相机成为唯一活动的主相机。XR Origin 为什么是玩家根对象
XR Origin(XR 原点)是体验者在虚拟世界中的根对象。它的子对象通常包括头显相机、左右控制器与移动系统。移动 XR Origin 会整体移动这套玩家;现实中的头部转动和位移,只改变其子相机的局部姿态。
头显使用 6DoF(六自由度)追踪:前后、左右、上下三种位移,加上俯仰、偏航、翻滚三种旋转。Tracked Pose Driver(追踪姿态驱动器)把这些姿态持续写入相机。
先加入新玩家,再停用旧相机
- 01
从 Starter Assets/Prefabs 把 XR Origin (XR Rig) 拖入 MainScene。
- 02
展开 XR Origin,确认其中存在 Main Camera、左右控制器和 Locomotion 子对象。
- 03
把 Tracking Origin Mode 设置为 Floor。Floor 表示以现实地面作为追踪高度基准,不会自动为虚拟地面添加碰撞。
- 04
把 XR Origin 放到展馆入口附近,起点不能嵌入地面或墙体。本项目地面表面位于世界 Y=0 时,可以把它作为起点参考;其他项目应以实际地面高度为准。
- 05
选中 XR Origin 下的 Main Camera,确认 Tag 为 MainCamera,并存在 Audio Listener 与 Tracked Pose Driver。
- 06
确认新相机完整后,再停用场景原来的独立相机,并把它的 Tag 改为 Camera0。最终只保留一台活动主相机和一个活动 Audio Listener。
玩家层级中的关键对象
父子层级让玩家整体移动与真实头部运动同时成立。
左右滑动表格,可查看完整内容
| 对象或设置 | 作用 | 本课状态 | 不正确时的现象 |
|---|---|---|---|
| XR Origin | 整体承载头显、手柄和移动系统 | 只保留一套活动对象 | 出现两套输入或两套玩家 |
| Tracking Origin Mode | 决定现实追踪高度基准 | Floor | 现实地面与虚拟起点高度不协调 |
| MainCamera 标签 | 让脚本找到活动主相机 | 只给 XR 相机使用 | 依赖主相机的功能找不到目标 |
| Audio Listener | 从体验者位置接收声音 | 全场景只有一个活动实例 | 控制台提示多个声音监听器 |
| Tracked Pose Driver | 把头显位置与旋转写入相机 | 位置与旋转都启用 | 头动时画面不随动 |
后处理与抗锯齿是两组设置
Post Processing(后处理)是在基础画面渲染后应用色彩、亮度等效果。场景中已有后处理对象时,活动 XR 相机仍要允许接收后处理,效果才会进入头显画面。
本课把相机的后处理抗锯齿保持为 No Anti-aliasing。它只表示不在这台相机上执行 FXAA、SMAA 等屏幕后处理抗锯齿,不代表项目完全没有抗锯齿;本项目 High 质量下的 URP 仍使用 4x MSAA。MSAA(多重采样抗锯齿)由 URP 质量设置单独控制,后续应结合 PICO 实机清晰度与运行流畅度选择。
让 XR 相机接收场景效果
- 01
展开 XR Origin,选择其下的 Main Camera。
- 02
在 Camera 组件的 Rendering 区域勾选 Post Processing。
- 03
把 Camera 中的 Anti-aliasing 保持为 No Anti-aliasing。
- 04
确认 URP 的 MSAA 属于另一处质量设置,不把两者误认为同一个开关。
- 05
进入运行模式轻微移动模拟视角,确认画面来自 XR Origin 下的相机。

观察 MainCamera 标签、Rendering 中的 Post Processing,以及相机自己的 Anti-aliasing。下方 Audio Listener 与 Tracked Pose Driver 共同支持声音和头显姿态。
沿父子层级解释一次头部转动
从 PICO 头显姿态开始,指出 Tracked Pose Driver、Main Camera 和 XR Origin 的关系,并说明为什么旧相机要在新相机就位后再停用。
- 场景中只有一套活动 XR Origin。
- 只有 XR 相机使用 MainCamera 标签并启用 Audio Listener。
- XR 相机已启用 Post Processing,能够区分相机后处理抗锯齿与 URP 的 MSAA。
让玩家站在虚拟地面上
为 Floor 建立实体碰撞边界
追踪原点只决定现实高度基准,真正承载玩家的是虚拟地面的实体碰撞体。本模块只完成 Floor,不提前配置场景漫游功能。看得见的模型不等于碰得到的边界
Mesh Renderer 负责把地面外观画出来,Collider(碰撞体)负责提供物理边界。没有碰撞体时,移动系统无法把地面当作实体表面,启用重力的玩家可能继续下落。
Box Collider 用长方体近似地面范围。Is Trigger(是否为触发器)关闭时,它形成实体阻挡;开启后主要报告进入和离开事件,不再承担普通实体阻挡。本课无需给 XR Origin 额外添加 Rigidbody,XRI 的移动系统会配合玩家的 Character Controller 与场景碰撞体限制移动。
为 Floor 添加非触发碰撞体
- 01
在 MuseumEnvironment 下选择 Floor,在 Inspector 中找到或添加 Box Collider。
- 02
确认 Is Trigger 没有勾选。
- 03
点击 Edit Collider,在场景窗口中调整 Center 与 Size,使绿色边界覆盖实际可站立的地面。
- 04
从侧面观察碰撞范围,避免它悬在地面上方或落到地面下方。
- 05
让 XR Origin 的起点位于碰撞体上方且不与墙体重叠,然后保存 MainScene。

本图只观察 Box Collider:组件已启用、Is Trigger 关闭,Center 与 Size 用于贴合地面。其他组件将在后面的场景漫游学习中使用。
追踪地面、碰撞体与瞬移区域的区别
三个名称都与“地面”有关,但解决的是不同问题。
左右滑动表格,可查看完整内容
| 对象或设置 | 负责内容 | 本课做法 | 不能代替什么 |
|---|---|---|---|
| Tracking Origin Mode = Floor | 以现实地面为追踪高度基准 | 在 XR Origin 上设置 | 不能生成虚拟碰撞边界 |
| Box Collider | 提供承载和阻挡玩家的实体范围 | 覆盖 Floor,关闭 Is Trigger | 不能声明瞬移落点 |
| Is Trigger | 切换为事件触发范围 | 保持关闭 | 开启后不能作为普通实体地面 |
| Teleportation Area | 声明射线可以选择的瞬移表面 | 本课只认识职责 | 不能代替实体碰撞体 |
用三个角度确认地面边界
分别从俯视、侧视和玩家起点观察 Floor 的碰撞范围,完成后用自己的话解释“看得见”和“碰得到”的区别。
- Box Collider 覆盖可站立地面,没有明显悬空或下陷。
- Is Trigger 保持关闭,XR Origin 起点位于实体地面上方。
- 能够说明 Teleportation Area 不负责防止玩家下落。
把所有设置串成一条链
连接代码编辑器并完成本课成果
最后让代码编辑器认识完整 Unity 工程,再沿初始化链确认每一层都能为后续交互开发提供条件。为什么双击脚本还需要项目文件
External Script Editor(外部脚本编辑器)决定 Unity 用哪个程序打开 C# 文件。.sln 是整个解决方案的入口,.csproj 记录项目脚本、Unity 程序集和软件包引用。它们是代码编辑器认识完整工程的索引文件,不是学生手工编写的业务代码。
只有编辑器打开完整解决方案并安装 C# 与 Unity 支持后,UnityEngine 类型、项目脚本和软件包代码才能提供补全、跳转与错误提示。单独打开一个 .cs 文件通常得不到完整上下文。
生成并打开完整代码工程
- 01
选择 Edit → Preferences → External Tools。
- 02
在 External Script Editor 中选择已经安装并具备 C# 与 Unity 支持的编辑器。
- 03
保留需要生成项目文件的软件包来源,至少让 Registry packages 与 Local packages 可以进入代码索引。
- 04
点击 Regenerate project files,重新生成 .sln 与 .csproj。
- 05
回到项目窗口双击一个 C# 脚本,确认编辑器打开完整解决方案,并能识别 UnityEngine。

观察 External Script Editor、软件包索引选项与 Regenerate project files。完成后从 Unity 双击脚本,而不是只在文件夹中打开单个文件。
本课成果清单
按链路依次确认,发现问题时回到对应模块处理。
左右滑动表格,可查看完整内容
| 成果 | 应达到的状态 | 学生能观察到什么 |
|---|---|---|
| 完整项目 | Unity 2022.3.62f3c1 打开 MainScene | 场景资源与层级正常载入 |
| Android 平台 | Android 为活动平台,纹理压缩为 ASTC | Android 构建选项可以使用 |
| 交互工具 | XRI 3.1.2、Starter Assets 与模拟器资源可用 | 能找到输入动作、XR Origin 和 XR Interaction Simulator |
| PICO 设备链 | OpenXR、PICO 功能与 PICO 4 Ultra 控制器配置可见 | 重新进入设置页后选择仍然保留 |
| 玩家与相机 | 一套活动 XR Origin、一台活动主相机、一个 Audio Listener | 头显姿态由 XR 相机接收,后处理已开启 |
| 实体地面 | Floor 的 Box Collider 范围正确且不是触发器 | 玩家起点位于可承载地面上方 |
| 代码环境 | 外部编辑器打开 .sln,并读取 .csproj | Unity 类型与项目脚本可以补全和跳转 |
初始化常见现象与处理方法
先判断现象属于哪一层,再只处理相关设置。
左右滑动表格,可查看完整内容
| 现象 | 可能原因 | 处理方法 |
|---|---|---|
| Android 不可选择 | 编辑器缺少 Android Build Support | 在 Unity Hub 为同一编辑器补装 Android 模块与工具链 |
| Samples 显示 Reimport | 资源已经导入 | 不要重复覆盖,到 Assets/Samples 找到实际文件 |
| 没有 PICO 功能项 | PICO OpenXR 扩展未被 Unity 识别 | 确认完整包和 package.json 位于项目 Packages |
| 重新进入设置后 OpenXR 未选中 | Android 载入器设置没有保存 | 回到 Android 标签重新启用并等待资源处理结束 |
| 头动时画面不随动 | 活动相机或 Tracked Pose Driver 不正确 | 确认 XR Origin 下的相机是唯一活动主相机 |
| 进入运行模式后下落 | Floor 缺少实体碰撞或起点嵌入地面 | 调整 Box Collider、Is Trigger 与 XR Origin 起点 |
| 画面没有场景色彩效果 | 活动 XR 相机未接收后处理 | 在相机 Rendering 中启用 Post Processing |
| 代码没有补全 | 编辑器未打开完整解决方案或索引过期 | 重新选择编辑器并生成项目文件 |
完成自己的项目初始化
从项目、平台、交互、设备、玩家、地面和代码环境七个方面逐项说明自己的结果,并在 PICO 4 Ultra 中确认头显与手柄追踪。
- 能够沿初始化链说出每一层的作用和界面位置。
- 控制台没有持续出现的红色编译错误,MainScene 已保存。
- PICO 实机能够接收头显与手柄追踪;模拟器结果只用于输入逻辑练习,不能代替实机体验。
把知识变成作品
本课练习
请按顺序完成以下任务,并保存自己的学习成果。- 01
不看页面,按顺序说出从完整项目到 PICO 实机运行的初始化链,并说明每层的作用。
- 02
在包管理器中找到 XRI 3.1.2、Starter Assets 与 XR Device Simulator,说明 Install、Import 和 Reimport 的区别。
- 03
在 OpenXR 设置中指出载入器、PICO Feature Group 和 PICO4 Ultra Touch Controller Profile,说明三者为何不能互相代替。
- 04
在 MainScene 中指出 XR Origin、XR 相机和 Floor 的 Box Collider,解释追踪高度与实体地面的区别。
- 05
从 Unity 双击一个 C# 脚本,确认代码编辑器打开完整解决方案并能识别 UnityEngine。
需要进一步确认时
本课参考资料
打开官方文档,核对软件设置、组件参数和设备说明。把本课进度保存下来
登录后可以保存浏览内容、有效学习时间、完成状态和答题参与记录。