Unity VR开发入门:基于SteamVR与VRTK快速构建沉浸式交互体验 1. 项目概述为什么选择Unity、SteamVR与VRTK的组合如果你正在琢磨怎么快速上手VR开发而不是从零开始造轮子那Unity3D配合SteamVR和VRTK这套组合拳大概率就是你一直在找的“捷径”。我最早接触VR开发时也尝试过自己写手柄交互、处理空间定位结果光是让两个手柄在场景里稳定显示、正确响应按键就折腾了小半个月。后来发现了VRTK现在叫Tilia框架才真正体会到什么叫“生产力工具”。这个项目标题“打造沉浸式VR体验”听起来有点宏大但核心其实就是教你如何利用这套成熟的工具链跳过底层繁琐的接口对接和物理交互实现直接聚焦在构建你的VR游戏或应用逻辑上。简单来说Unity3D是那个强大的游戏引擎负责渲染画面、处理物理、管理场景SteamVR是Valve提供的官方插件它像是一个“驱动程序”让你的Unity项目能识别并连接HTC Vive、Valve Index、Oculus Rift通过SteamVR兼容模式等主流VR头显和手柄把硬件的位置、旋转、按键数据“翻译”成Unity能理解的格式而VRTK则是在这之上的一层“交互框架”它把VR开发中那些通用且复杂的需求——比如怎么用手柄抓取物体、怎么瞬移移动、怎么和UI交互——都封装成了预制件Prefab和组件你只需要拖拽、配置就能实现一套稳定可靠的交互系统。这套组合特别适合独立开发者、小型团队或者想快速验证创意的朋友。你不用成为OpenVR SDK的专家也不用深究手柄射线检测的每一行数学计算VRTK已经帮你把坑踩了一遍。当然这并不意味着你不需要理解原理。恰恰相反用好VRTK的前提是理解它背后的事件机制和设计模式这样才能在它提供的灵活性和易用性之间找到平衡定制出符合自己项目需求的独特体验。接下来我会带你从环境搭建到核心功能实现一步步拆解这个流程并分享一些我实际项目中积累的、文档里不会写的“避坑”心得。2. 环境准备与项目初始化避开版本兼容的“深坑”万事开头难VR项目的第一步——环境搭建——往往是劝退新手的第一个门槛。问题很少出在“怎么做”而大多出在“版本不对”。Unity、SteamVR插件、VRTKTilia包以及你电脑上的SteamVR运行时这四者的版本兼容性是一个动态变化的“雷区”。2.1 Unity版本与渲染管线的选择首先打开Unity Hub创建一个新项目。这里第一个关键决策点是Unity版本。不要盲目追求最新版。对于VR开发稳定性优先于新特性。在我撰写本文时Unity 2021 LTS长期支持版或 Unity 2022 LTS是经过社区大量验证的稳定选择它们对URP通用渲染管线的VR支持已经比较完善。Unity 2023及更新的版本可能包含未修复的VR相关Bug。第二个决策点是渲染管线。你有三个选择内置渲染管线Built-in最传统兼容性最好SteamVR和VRTK支持最成熟。如果你是初学者或者项目对画面特效要求不高追求极致的稳定和简单选这个。通用渲染管线URP现代选择性能通常优于内置管线支持更多现代Shader和效果。这是目前VR项目的推荐选择。你需要从Package Manager中安装URP包并在创建项目时选择URP模板或之后通过Assets Create Rendering URP Asset创建并配置URP资源。高清渲染管线HDRP面向高端PC画质最好但对硬件要求极高。除非你的VR项目目标是4090显卡级别的设备并且有专业的图形程序员否则不推荐用于VR开发极易导致帧率无法维持90fps的VR基本要求引起眩晕。我的实操心得我90%的VR项目都使用URP。创建项目后第一件事是去Window Package Manager将Universal RP升级到一个稳定的版本例如与Unity 2021 LTS配套的12.x版本。然后务必记得在Project Settings Graphics中将Scriptable Render Pipeline Settings资产指向你创建的URP Asset。这一步忘了你的场景可能会一片粉红Missing Shader。2.2 SteamVR插件的正确安装方式接下来是SteamVR插件。绝对不要从Asset Store下载过时的“SteamVR Plugin”。Valve官方已经将SteamVR Unity集成迁移到了OpenXR框架下并主要通过Unity的Package Manager和Git URL来安装。推荐方法通过OpenXR确保你的电脑上已安装最新版的Steam和SteamVR从Steam商店安装。在Unity中打开Window Package Manager。点击左上角的“”号选择“Add package from git URL...”。输入Valve官方的OpenXR插件仓库地址https://github.com/ValveSoftware/unity-xr-plugin.git等待Unity下载并导入。这个包包含了SteamVR所需的OpenXR后端支持。导入后进入Edit Project Settings XR Plug-in Management。在“PC Standalone”标签页下勾选“OpenXR”。然后在下方出现的“OpenXR”设置中点击“”号添加交互配置文件。对于Vive手柄添加“KHR/Simple Controller” 和 “Valve Index Controller”对于Oculus Touch添加“Oculus Touch Controller Profile”。这步是告诉Unity我们使用哪种手柄。最后也是关键一步在Project Settings Player的“Other Settings”里找到“Color Space”。VR项目必须使用“Linear”颜色空间。Gamma空间会导致光照计算不准确画面发灰这是新手常犯的错误。安装成功后你可以在Game视图看到“OpenXR”字样并且当你的头显和手柄开启后Unity编辑器中会出现虚拟的手柄模型。2.3 VRTK v4 (Tilia)的导入与设置VRTK已经进化到了第四代并更名为“Tilia”它不再是一个巨大的单一包而是由许多独立、可组合的“包Package”组成。这种模块化设计更清晰但也让安装流程有了一点变化。安装步骤从Unity Asset Store搜索并下载“VRTK v4 Tilia Package Importer”。这是一个很小的工具不是VRTK本身。导入这个工具后在Unity菜单栏会看到“Tilia”菜单。点击Tilia Package Importer打开导入器窗口。在这里你可以看到一个包列表。对于入门我建议先导入以下几个核心包Tilia.CameraRigs.UnityXR这是连接Unity XR系统我们刚才设置的OpenXR的相机支架Camera Rig预制件。它替代了旧版SteamVR Plugin中的[CameraRig]。Tilia.Interactions.Interactables.Unity处理所有可交互物体抓取、触碰、使用的核心包。Tilia.Interactions.PointerInteractors.Unity处理射线指针交互用于UI、远距离操作。Tilia.Interactions.SpatialButtons.Unity用于创建VR中的3D空间按钮。Tilia.Locomotion.Teleporter.Unity实现瞬移移动。Tilia.Indicators.ObjectPointers.Unity为指针提供视觉指示器如射线、光标。在导入器窗口中勾选你需要的包点击“Import”或“Import/Update”。导入器会自动从GitHub下载这些包并添加到你的项目的Packages文件夹中。这个过程完全是模块化的你可以随时回来导入其他功能包如手势识别、物理关节等。导入完成后你会在Project窗口的Packages目录下看到这些Tilia包。重要这些包不会自动出现在你的场景中你需要手动去Packages里找到它们的Prefab拖入场景或通过代码实例化。避坑指南Tilia包严重依赖Zinnia.Unity这个基础框架。如果你在导入Tilia包时遇到编译错误提示缺少Zinnia的命名空间请确保先通过同一个Package Importer导入Zinnia.Unity包。安装顺序应该是先装Zinnia.Unity再装其他Tilia功能包。3. 构建基础VR场景从“相机支架”到可交互世界环境搭好了包也齐了现在我们来搭建一个最基础的、能让玩家“站进去”并“看到自己手”的VR场景。这一步的核心是理解“相机支架Camera Rig”和“交互器Interactor”这两个概念。3.1 设置Camera Rig与跟踪空间在旧版SteamVR中你会直接拖一个[CameraRig]预制件到场景。在VRTK v4 (Tilia) Unity XR的体系下做法类似但更模块化。创建基础场景新建一个简单的场景添加一些平面Plane作为地面放几个立方体Cube。引入Camera Rig在Project窗口中导航到Packages Tilia CameraRigs UnityXR Runtime Prefabs。将CameraRigs.UnityXR预制件拖入你的场景层级Hierarchy。这个预制件通常包含CameraRigs.UnityXR根物体。Cameras子物体包含一个Main Camera。这个相机将由头显驱动。LeftHand/RightHand分别代表左右手柄的虚拟物体。它们下面会有Controller等子物体用于挂载交互脚本。配置跟踪原点选中场景中的CameraRigs.UnityXR在Inspector面板你会看到UnityXRConfigurator组件。这里有一个关键设置Tracking Origin Mode。它决定了玩家在VR世界中的“原点”。Device原点在头显设备上。玩家移动是基于头显的初始位置。这是房间尺度Room ScaleVR的推荐设置玩家可以在设定的游戏区域内自由走动。Floor原点在地板。适用于坐式或站桩式体验。 大多数情况下选择Device即可。删除默认相机确保删除场景中自带的Main Camera避免渲染冲突。现在如果你运行项目确保头显和手柄已开启应该已经能看到场景画面出现在头显里并且手柄的虚拟模型会随着你真实手柄的移动而移动。恭喜你已经成功“进入”了VR世界。3.2 理解Interactor与Interactable交互的基石VRTK v4的核心交互模型非常清晰基于“交互器Interactor”和“可交互物Interactable”这两个角色。Interactor交互器这是“主动”的一方通常是手柄。它负责发出交互请求比如“我想抓取”。在Tilia中LeftHand和RightHand物体上需要添加Interactor组件如Interactions.Interactor。Interactable可交互物这是“被动”的一方是场景中可以被交互的物体比如一个杯子、一个按钮、一扇门。你需要给这个物体的GameObject添加Interactable组件如Interactions.Interactable。交互的过程就是Interactor检测到范围内的Interactable根据配置的交互方式抓取、触碰、使用等在满足条件如按下特定按钮时触发相应的事件。让我们实现最基础的抓取功能为手柄配置Interactor在Hierarchy中展开CameraRigs.UnityXR-LeftHand找到代表控制器本身的物体例如叫Controller。选中它点击Inspector底部的“Add Component”按钮搜索并添加Interactions Interactor组件。对RightHand的控制器物体进行同样操作。在这个组件上你需要关联一个Action。这个Action用来触发抓取。在Grab Action字段你需要创建一个BooleanAction。点击字段右边的圆形图标或...选择Create new Action...创建一个新的BooleanAction资产。将其命名为GrabButton。选中新建的GrabButton资产在它的Inspector中将其Source绑定到对应的手柄输入。例如对于Unity XR你可以选择Unity Input System然后在Action中选择XRI RightHand/Grip抓握键或XRI RightHand/Trigger扳机键。我通常用扳机键Trigger作为抓取因为它有模拟量可以实现“轻按握住重按捏碎”的进阶效果。创建可抓取的物体在场景中创建一个球体Sphere或立方体。选中它添加Interactions Interactable组件。为了让抓取有物理效果确保物体有Rigidbody刚体组件。关键一步在Interactable组件的Grab Configuration部分将Grab Type设置为Follow物体跟随手柄运动或Scale To Grabber物体缩放到抓取点。Follow是最常用、最自然的方式。建立连接实际上由于我们使用了Tilia的标准组件Interactor会自动通过碰撞体或射线检测场景中的Interactable。你不需要手动连线。现在运行项目用手柄指向你创建的物体按下扳机键你应该就能抓住并挥舞它了这就是VRTK带来的魔力——用极少的配置实现了复杂的物理抓取交互。注意事项物理抓取有时会出现物体抖动或穿透。这通常是由于物理更新频率Fixed Timestep与渲染帧率不匹配或者物体间碰撞体设置不当。可以尝试在Project Settings Time中将Fixed Timestep调小如0.013对应约75Hz确保被抓物体和手柄交互点的碰撞体是简单的形状如球体、盒子避免使用Mesh Collider适当增加被抓物体的质量Mass。4. 实现核心VR交互瞬移、UI与双手交互基础抓取实现了但一个完整的VR体验还需要移动和更丰富的交互。我们接着实现最常用的两种功能瞬移移动和与UI的交互。4.1 瞬移Teleport移动的实现在VR中使用摇杆控制角色移动极易引起晕动症。因此“瞬移”成为了最舒适、最主流的移动方式。Tilia的瞬移系统是模块化设计的典范。实现步骤导入并配置指针瞬移通常通过手柄射出一条射线指向目标位置来实现。我们需要一个“指针”。从Packages Tilia Indicators ObjectPointers Unity Runtime Prefabs中将Indicators.ObjectPointers.Unity预制件拖入场景。它可以作为任何物体的子物体但我们通常把它作为手柄的子物体。将其拖拽到Hierarchy中LeftHand或RightHand取决于你想用哪只手瞬移的控制器物体下。选中这个指针预制件在Inspector中找到Object Pointer组件。在Activation Action中绑定一个按钮如XRI LeftHand/Primary2DAxisClick即摇杆按下。这样按下摇杆就会激活指针射线。导入并配置瞬移器指针负责“指”瞬移器负责“移”。从Packages Tilia Locomotion Teleporter Unity Runtime Prefabs中将Locomotion.Teleporter.Unity预制件拖入场景。放在场景根层级即可。选中瞬移器预制件找到Teleporter Configurator组件。这里需要将Target设置为我们的CameraRigs.UnityXR物体这样瞬移时移动的才是玩家。然后最关键的一步将之前创建的指针预制件拖拽到Teleporter Configurator组件的Surface Locator字段。这建立了“指针找到的位置”与“瞬移目标位置”之间的连接。配置可瞬移区域默认情况下指针射线指向任何碰撞体都会显示目标点。但我们通常只希望在地板或特定平台上允许瞬移。创建一个新的Layer图层命名为TeleportArea。将场景中作为地面的物体如Plane的Layer设置为TeleportArea。回到指针预制件的Object Pointer组件找到Rules部分。这里可以添加规则来限制有效目标。添加一个Any Component Type Rule将其设置为MeshCollider如果你的地面用的是MeshCollider。更精确的做法是使用Layer Rule直接指定只有TeleportArea层的物体才有效。现在运行按下指定手柄的摇杆你应该能看到一条射线从手柄射出。指向允许的地面区域射线末端会显示一个目标点预览通常是一个圆圈或指针。松开摇杆玩家就会瞬间移动到那个位置。4.2 与UI画布的交互VR中的UI不再是屏幕上的2D元素而是悬浮在3D空间中的“世界空间UI”。Unity的Canvas画布在Render Mode设置为World Space后就可以用于VR。让UI变得可交互创建世界空间UIGameObject UI Canvas。在Canvas的Inspector中将Render Mode改为World Space。你可以调整Rect Transform的Width,Height和Scale并把它摆放在场景中合适的位置。添加UI交互器UI交互需要专门的交互器。在之前添加了Interactions Interactor的手柄控制器物体上再添加一个UI Canvas Interactor组件来自Tilia包。这个组件专门用于处理与Unity UI系统的交互。配置UI指针我们还需要一个专门用于UI交互的指针它通常是一条直线射线。从Packages Tilia Interactions PointerInteractors Unity Runtime Prefabs中找到Interactions.PointerInteractors.Unity预制件。将其拖拽为手柄控制器的子物体与之前的物体指针并列。这个预制件上自带UI Pointer组件。确保其Activation Action绑定了一个合适的按钮比如XRI RightHand/Trigger扳机键。这样按下扳机就会激活UI指针射线。关联UI事件相机为了让UI能响应射线点击需要告诉Canvas是哪个相机在发射“射线”。实际上UI交互器会处理这个。但你需要确保Canvas的Graphic Raycaster组件中的Event Camera被正确设置。一个简单的方法是写一小段代码在运行时动态设置或者使用Tilia提供的Camera Raycaster组件。更常见的做法是使用Tilia的UI Canvas预制件如果存在它已经预配置好了这些连接。完成这些后运行项目用手柄的扳机键射出UI指针指向你创建的Canvas上的按钮应该可以看到按钮有悬停效果松开扳机可以触发点击事件。VR中的UI交互就实现了。4.3 实现双手交互与高级抓取单手交互是基础双手交互比如双手持枪、双手拉伸物体能极大提升沉浸感。VRTK v4对此也有很好的支持。双手抓取一个物体配置Interactable选中一个可抓取物体在其Interactions Interactable组件中找到Grab Configuration。设置抓取规则将Grab Type设置为Toggle切换式可能不太适合双手。对于双手操作我们通常希望每只手都能独立地施加影响。一个更高级的模式是使用Multiple Grab。在Grab Configuration下找到Grab Receiver设置。确保Grab Provider是支持多抓取的例如Multiple Grab。这样配置后第一只手抓取物体时物体跟随该手。当第二只手也抓取同一个物体时物体本身不会改变所有权但第二只手会作为一个“次级交互点”影响物体。这通常需要配合自定义脚本来实现具体行为比如计算两手之间的向量来控制物体的缩放或旋转。实现“用力抓握”效果 之前我们用的是布尔Boolean动作即扳机键只有按下/松开两种状态。但扳机键是模拟的有0到1的压感。我们可以利用这一点。修改Interactor的Action将手柄上Interactions Interactor组件的Grab Action从一个BooleanAction改为FloatAction。绑定模拟输入在新的FloatAction资产中将Source绑定到Unity Input System的XRI RightHand/Trigger这是一个浮点值。配置Interactable的抓握阈值在可抓取物体的Interactable组件中可以设置Grab Threshold。比如设置为0.2那么只有当扳机按压值超过0.2时才触发抓取。你还可以在代码中监听这个浮点值来实现“握力越大物体被抓得越紧甚至捏碎”的效果。实操心得双手物理交互是VR开发的难点之一很容易出现物体抽搐、旋转失控。除了调整物理参数质量、阻力、角阻力一个有效的技巧是使用“关节Joint”而不是简单的Follow。Tilia提供了Interactions Controllable等组件来创建基于物理关节的抓取它能产生更真实、稳定的双手操作感但配置也更复杂。对于大多数情况简单的Follow配合良好的碰撞体设计已经足够。5. 性能优化与调试确保90fps的流畅体验VR体验的底线是性能。帧率低于头显刷新率通常是90Hz或120Hz会直接导致眩晕。在Unity中开发VR必须时刻关注性能。5.1 渲染性能优化单通道立体渲染Single Pass Instanced这是最重要的一个设置。它让Unity只绘制一次场景然后实例化给左右眼能大幅减少CPU提交给GPU的绘制调用Draw Calls。在Project Settings Player XR Plug-in Management OpenXR或你的XR插件设置中找到Stereo Rendering Mode选择Single Pass Instanced。注意如果你的项目使用了某些不支持单通道Instanced的Shader特别是一些老旧的或自定义Shader画面可能会出错需要升级或修改Shader。GPU Instancing对于场景中大量重复的物体如树木、石块确保它们的材质球勾选了Enable GPU Instancing。这能将这些物体的渲染合并极大提升效率。纹理与模型优化纹理使用ASTC或ETC2压缩格式尺寸尽量为2的幂次方。避免使用超大尺寸如4K的纹理除非必要。模型减少面数。VR中玩家离物体很近但并不意味着所有模型都需要高模。使用LODLevel of Detail系统为物体创建多个细节层次的模型根据距离自动切换。光照与阴影实时光影非常消耗性能。烘焙光照Baked Lighting对于静态场景强烈推荐使用光照烘焙。将静态物体标记为Static然后打开Window Rendering Lighting进行光照烘焙。这会将光照信息“烤”进纹理运行时零成本。实时阴影如果必须使用实时阴影尽量缩小阴影距离Shadow Distance降低阴影分辨率Shadow Resolution并考虑使用“级联阴影映射Cascaded Shadow Maps”的较近层级。后处理Post-Processing景深、运动模糊等效果在VR中效果不佳且耗费资源应尽量避免。色彩校正、Bloom等轻量级效果可以谨慎使用。5.2 脚本与逻辑性能优化避免每帧的Find和GetComponent这是Unity性能的经典陷阱。在Start()或Awake()中缓存需要的组件引用。// 错误做法 void Update() { var rb GetComponentRigidbody(); rb.AddForce(Vector3.up); } // 正确做法 private Rigidbody _rb; void Start() { _rb GetComponentRigidbody(); } void Update() { _rb.AddForce(Vector3.up); }使用对象池Object Pooling对于需要频繁创建和销毁的物体如子弹、特效使用对象池复用它们避免昂贵的Instantiate和Destroy调用。减少不必要的物理计算将不需要移动的物体设为Static或Kinematic。调整物理引擎的更新频率Fixed Timestep到合理值如0.013s并非越高越好。5.3 使用Profiler与Frame DebuggerUnity自带的性能分析工具是你的最佳伙伴。Profiler (Window Analysis Profiler)运行游戏时打开观察CPU、GPU、渲染、内存等各项指标。重点关注Rendering标签下的Batches合批数和SetPass CallsShader切换次数它们过高是性能瓶颈的主要标志。CPU Usage标签可以帮你找到耗时的函数。Frame Debugger (Window Analysis Frame Debugger)它可以让你“暂停”某一帧查看这一帧所有绘制调用的详细列表。这是诊断为什么合批失败、为什么Draw Calls过高的终极工具。5.4 常见问题排查速查表问题现象可能原因排查与解决思路头显内画面抖动或撕裂帧率不稳定未达到头显刷新率。1. 打开Stats面板Game视图右上角查看FPS。2. 使用Profiler定位性能瓶颈CPU或GPU。3. 降低画质设置如阴影、抗锯齿MSAA。手柄模型位置漂移或抖动1. 定位基站被遮挡或反射干扰。2. Unity中手柄模型更新逻辑问题。1. 检查真实环境确保基站能“看到”手柄。2. 检查Tracking Origin Mode设置是否正确。3. 在Unity中检查手柄GameObject的Transform是否被其他脚本错误修改。抓取物体时穿透或剧烈抖动1. 物理更新频率问题。2. 抓取方式与刚体配置不匹配。1. 尝试减小Fixed Timestep如0.013。2. 尝试将抓取类型从Follow改为基于物理关节的方式。3. 增加被抓物体的质量Mass并检查碰撞体是否为简单形状。UI指针无法点击按钮1. Canvas的Event Camera未设置。2. UI指针未激活或射线被遮挡。1. 确保Canvas使用World Space模式且Graphic Raycaster的Event Camera被正确赋值通常是XR相机。2. 检查UI指针预制件的Activation Action绑定是否正确射线是否启用。构建Build后运行黑屏/无反应1. XR插件管理设置未包含在构建中。2. 输入系统冲突。1. 在Project Settings Player XR Plug-in Management中确保为目标平台PC Standalone勾选了OpenXR。2. 如果使用新输入系统确保在Project Settings Player Other Settings Active Input Handling中选择了正确选项通常选“Both”或“New Input System”。瞬移时玩家高度错误Tracking Origin Mode设置错误。在Camera Rig的UnityXRConfigurator上将Tracking Origin Mode改为Floor或在代码中根据玩家身高动态调整相机高度。6. 项目构建与发布从编辑器到可执行文件当你的VR体验在编辑器中运行流畅后最后一步就是将其打包分发给用户。6.1 构建设置详解平台切换在File Build Settings中选择PC, Mac Linux Standalone在Target Platform中选择Windows对于SteamVR。场景添加将你开发好的场景拖入Scenes In Build列表。玩家设置Player SettingsCompany Name和Product Name填写你的公司和产品名。Default Icon设置应用图标。Resolution and PresentationFullscreen Mode通常选Fullscreen Window。Run In Background建议勾选这样即使焦点离开窗口VR应用也不会暂停。Other SettingsColor Space必须为Linear。Auto Graphics API取消勾选确保Vulkan在列表底部或移除。对于SteamVR通常只保留Direct3D11兼容性最好。Virtual Reality Supported这个选项在使用了XR Plugin Management后通常会被自动管理但可以检查一下是否勾选。XR插件管理确认再次进入Project Settings XR Plug-in Management确保PC Standalone下的OpenXR已被勾选。6.2 构建后处理与测试点击Build选择一个输出文件夹Unity会开始编译。构建完成后你会得到一个.exe文件和一个同名的_Data文件夹。至关重要的测试步骤在SteamVR运行环境下测试关闭Unity编辑器直接双击运行生成的.exe文件。确保SteamVR已经启动。这是最接近用户环境的测试。测试所有交互路径用手柄完整地走一遍核心流程移动、抓取、使用UI、触发所有关键功能。性能验证在真机上运行使用SteamVR的帧时序图按系统按钮调出SteamVR仪表盘在设置-开发者中可找到来监控帧率是否稳定在90fps。红色条代表掉帧需要回头优化。6.3 打包资源与发布准备对于发布到Steam等平台你还需要创建SteamVR应用清单文件这是一个.vrmanifest文件用于告诉SteamVR你的应用名称、启动路径、支持的控制器类型等。Valve提供了工具和文档来生成它。制作宣传素材包括库封面、横幅、截图和预告片。考虑安装包使用安装包制作工具如Inno Setup将.exe和_Data文件夹打包成一个安装程序方便用户安装。整个流程走下来从零开始到一个可交互、可发布的VR原型核心就在于理解SteamVROpenXR作为输入/输出层VRTKTilia作为交互逻辑层的分工。这套工具链极大地降低了VR开发的门槛让你能把精力集中在创意和内容本身而不是反复解决手柄跟踪、物体抓取这些底层问题上。记住VR开发是一个高度依赖实践和迭代的领域多试、多调、多在真机上测试是打磨出优秀体验的不二法门。