Cardboard Unity 完整开发教程
Cardboard 是 Google 推出的一款低成本 VR 解决方案,它通过一个简单的纸板盒子将手机变成一个 VR 头显,对于 Unity 它是一个非常棒的入门 VR 开发平台。

第一部分:准备工作
在开始之前,请确保你已经准备好以下环境:
- Unity 编辑器:推荐使用较新的稳定版本(如 2025.3 LTS 或更高版本)。
- Android 开发环境:
- 安装 Android SDK。
- 安装 Java Development Kit (JDK)。
- 在 Unity 的
Edit > Preferences > External Tools中正确配置 JDK 和 Android SDK 的路径。
- 一台 Android 智能手机:确保手机支持 Gyroscope(陀螺仪),并且性能足够流畅运行你的 VR 场景。
- Cardboard App:在手机上从 Google Play 商店安装 "Google Cardboard" 应用,这个应用可以帮你校准手机并测试 VR 效果。
第二部分:安装 Cardboard SDK
Unity 提供了一个官方的 Cardboard XR Plugin,这是目前推荐的方式。
-
打开 Unity Package Manager:
- 在 Unity 编辑器中,选择
Window > Package Manager。
- 在 Unity 编辑器中,选择
-
安装 XR Plugin Management:
(图片来源网络,侵删)- 在 Package Manager 窗口中,点击左上角的 号,选择
Add package from git URL...。 - 输入
com.unity.xr.management并确认,如果已经安装,可以跳过此步。
- 在 Package Manager 窗口中,点击左上角的 号,选择
-
安装 Cardboard XR Plugin:
- 再次点击 号,选择
Add package from git URL...。 - 输入
com.google.xr.cardboard并确认。
- 再次点击 号,选择
-
配置项目:
- 安装完成后,
Project Settings窗口会自动弹出,如果没有,可以手动打开Edit > Project Settings。 - 在左侧菜单中选择
XR Plug-in Management。 - 切换到
Android标签页。 - 勾选
Cardboard选项。
- 安装完成后,
第三部分:创建和配置 VR 场景
现在我们来创建一个基础的 VR 场景。
-
创建新场景:
(图片来源网络,侵删)- 新建一个 Unity 3D 场景,清空默认的相机和光照(
Delete按钮)。
- 新建一个 Unity 3D 场景,清空默认的相机和光照(
-
设置 XR Rig:
- 这是 VR 场景的核心,它包含了用于渲染 VR 视图的左右两个相机。
- 在菜单栏中选择
GameObject > XR > XR Origin (VR)。 - Unity 会自动为你创建一个
XR Origin (VR)对象,它下面包含了Camera Offset和Main Camera。
-
配置 XR Origin:
- 选中
XR Origin (VR)对象,在 Inspector 窗口中你会看到XR Rig组件。 - Tracking Type:选择
Stationary(固定)或Room-scale(房间尺度),对于 Cardboard,Stationary是最常用的,它允许你通过转头环顾四周,但身体位置是固定的。 - Base Tracking Origin:通常设置为
Head。
- 选中
-
配置相机:
- 选中
Main Camera对象。 - 清除背景:将
Background属性设置为Solid Color,并选择一个你喜欢的颜色(比如黑色),这能避免在加载时看到奇怪的渲染效果。 - 禁止 Clipping:取消勾选
Clipping Planes下的Near和Far选项,在 VR 中,过近的裁剪平面会非常不舒服。 - 禁止 Audio Listener:取消勾选
Audio Listener,一个场景中只需要一个 Audio Listener,并且它应该位于你的XR Rig上。
- 选中
-
添加光照:
- 为了看到场景中的物体,添加一个光源。
GameObject > Light > Directional Light是一个不错的选择。
- 为了看到场景中的物体,添加一个光源。
-
添加一个 3D 物体:
- 为了测试,在场景中放置一个 3D 物体,
GameObject > 3D Object > Cube。
- 为了测试,在场景中放置一个 3D 物体,
第四部分:实现交互 - 添加一个“凝视”按钮
VR 应用最常见的交互方式之一就是“凝视”(Gaze),用户盯着一个物体看几秒钟,就会触发一个事件(如开门、点击按钮)。
-
创建 UI 画布:
- 在菜单栏选择
GameObject > UI > Canvas,这会自动创建一个 Canvas、一个 EventSystem 和一个 Text 对象。
- 在菜单栏选择
-
创建一个按钮:
- 选中 Canvas,在菜单栏选择
GameObject > UI > Button,一个默认的按钮会出现在 Canvas 上。
- 选中 Canvas,在菜单栏选择
-
创建凝视脚本:
- 在
Project窗口中,右键点击Create > C# Script,命名为GazeButton。 - 双击打开脚本,用以下代码替换其内容:
using UnityEngine; using UnityEngine.UI; public class GazeButton : MonoBehaviour { // 这个变量用于在 Inspector 中将按钮的 Image 组件拖拽进来 public Image reticleImage; // 凝视时间,单位为秒 public float gazeTime = 2f; // 按钮的原始颜色 public Color originalColor = Color.white; // 凝视时按钮的颜色 public Color gazeColor = Color.yellow; private float timer; private bool isGazing; void Start() { // 初始化计时器 timer = 0; // 设置初始颜色 reticleImage.color = originalColor; } void Update() { // 检查玩家是否正在凝视这个按钮 if (isGazing) { // 增加计时器 timer += Time.deltaTime; // 改变按钮颜色,提供视觉反馈 reticleImage.color = Color.Lerp(originalColor, gazeColor, timer / gazeTime); // 如果凝视时间足够长 if (timer >= gazeTime) { // 触发点击事件 GetComponent<Button>().onClick.Invoke(); // 重置计时器 timer = 0; isGazing = false; reticleImage.color = originalColor; } } } // 当玩家的视线进入按钮的碰撞体时调用 public void OnGazeEnter() { isGazing = true; timer = 0; } // 当玩家的视线离开按钮的碰撞体时调用 public void OnGazeExit() { isGazing = false; timer = 0; reticleImage.color = originalColor; } } - 在
-
设置凝视脚本:
- 选中场景中的
Button对象。 - 将
GazeButton.cs脚本拖拽到 Button 对象上。 - 在 Inspector 中,你会看到
Gaze Button组件。 - 将
Button对象下的Image子对象拖拽到Reticle Image字段中。 - 调整
Gaze Time为一个合适的值(2 秒)。 - 调整
Original Color和Gaze Color以获得更好的视觉效果。
- 选中场景中的
-
添加碰撞体:
- 为了让脚本检测到凝视,Button 必须有一个碰撞体。
- 选中
Button对象,在 Inspector 中点击Add Component。 - 添加一个
Box Collider 2D组件,UI 默认的Button组件已经包含了EventSystem所需的交互逻辑,所以不需要额外添加 3D 碰撞体。
-
创建事件处理函数:
- 选中
Button对象,在 Inspector 的Button组件下方,你会看到一个On Click ()事件列表。 - 点击 号,将场景中的
Button对象本身拖拽到None (Object)字段中。 - 在右侧的下拉菜单中,选择
GazeButton > OnGazeExit。注意:这里我们选择OnGazeExit是因为当点击事件被触发后,我们希望立即重置状态,你也可以创建一个专门的处理函数。
- 选中
第五部分:构建和部署到手机
-
设置 Player Settings:
- 打开
File > Build Settings。 - 在
Platform列表中,确保选中Android,然后点击Switch Platform。 - 点击
Player Settings...按钮。 - 在
Other Settings中:- Package Name:设置一个唯一的包名,
com.yourname.cardboarddemo。 - Minimum API Level:建议设置为
Android 7.0 'Nougat' (API level 24)或更高。 - Target API Level:设置为
Android 13.0 'Tiramisu' (API level 33)。 - Orientation:设置为
Landscape Left或Landscape Right,因为 VR 应用通常使用横屏模式。
- Package Name:设置一个唯一的包名,
- 打开
-
构建项目:
- 在
Build Settings窗口中,点击Add Open Scenes将你的当前场景添加到构建列表中。 - 点击
Build按钮,选择一个文件夹来保存你的 APK 文件。 - 等待构建完成。
- 在
-
部署到手机:
- 将构建好的 APK 文件传输到你的手机上。
- 在手机上安装该 APK。
- 将手机放入 Cardboard 盒子中。
- 打开你安装的应用,将手机放入盒子,戴上它。
- 按下 Cardboard 盒子上的按钮,或者点击手机屏幕上的“扫描”按钮,应用会自动进入 VR 模式。
你应该能看到你的场景,并且可以通过转头来观察环境,当你盯着按钮看大约 2 秒后,按钮的颜色会变化,OnGazeExit 事件会被触发。
进阶主题与最佳实践
-
交互控制器:
- Cardboard 本身没有控制器,但你可以使用 激光指针 作为替代,在
XR Rig的Camera Offset下,可以添加一个虚拟的激光指针,通过凝视来“指向”物体。
- Cardboard 本身没有控制器,但你可以使用 激光指针 作为替代,在
-
空间音频:
- 使用 Unity 的
AudioSource组件和AudioListener。 - 将
AudioSource放置在 3D 空间中的某个物体上,并勾选Spatial Blend,将其值设置为 1,这样声音就会从声源的位置发出,创造出身临其境的听觉体验。
- 使用 Unity 的
-
性能优化:
- 移动端性能至关重要,时刻注意 Draw Call、三角面数和内存占用。
- 使用简单的几何体和贴图。
- 合并静态物体。
- 避免在每一帧都进行昂贵的计算。
-
用户体验:
- 避免突然的移动:VR 晕动症的主要诱因之一,尽量使用平滑的相机过渡。
- 提供清晰的视觉反馈:就像我们的凝视按钮一样,用户需要知道他们的操作是否被系统识别。
- 校准:提醒用户使用 Cardboard App 进行陀螺仪校准,以获得最佳的追踪效果。
希望这份详细的教程能帮助你顺利入门 Cardboard VR 开发!祝你编码愉快!
