开发干货 | Unity VR/AR项目优化技巧与工具

栏目: 后端 · 发布时间: 7年前

内容简介:如今,各种新型虚拟现实VR和增强现实AR的技术、设备、工具包和平台不断涌现。但对于开发人员而言,这样的变化会在处理软件、功能和业务优先级时产生负担。Unity开发人员在处理丰富多样,不断变化的大量功能和服务,同时应该如何实现“一次开发,多次构建”呢?本文是沉浸式媒体开发公司Parkerhill Reality Labs的白皮书《Best Practices for Multi-Device VR/AR Development》的简略版本,将分享5个Unity VR/AR项目多设备优化技巧和工具。Unity

如今,各种新型虚拟现实VR和增强现实AR的技术、设备、 工具 包和平台不断涌现。但对于开发人员而言,这样的变化会在处理软件、功能和业务优先级时产生负担。Unity开发人员在处理丰富多样,不断变化的大量功能和服务,同时应该如何实现“一次开发,多次构建”呢?

本文是沉浸式媒体开发公司Parkerhill Reality Labs的白皮书《Best Practices for Multi-Device VR/AR Development》的简略版本,将分享5个Unity VR/AR项目多设备优化技巧和工具。

项目难题

Unity中选择目标平台的功能往往不够精细,Unity正努力通过为XR播放器设置和API类提供更多支持来解决该问题。但不可避免的是,开发人员需要使用一些更高级别的工具包来处理他们在Unity项目中指向的实际设备。

下图说明了开发人员在选取多个SDK和高级工具包时所面临的难题,这类工具包中包含玩家绑定、预制件、实用脚本组件、着色器和示例场景等内容。

开发干货 | Unity VR/AR项目优化技巧与工具

优化工具

在Parkerhill Reality Labs,我们开发了许多VR和AR的项目和演示,体验过使用不同SDK对各种不同设备进行构建的痛苦。因此,我们总结出了一些最佳实践技巧。而且,我们还实现了一系列Unity编辑器内的实用工具,它们能方便地实现这些设计模式,我们把这些工具的资源包成为Parkerhill BridgeXR。

下载Parkerhill BridgeXR,请访问Asset Store资源商店:

https://assetstore.unity.com/packages/tools/utilities/bridgexr-116811

优化技巧

1 为玩家绑定使用附加场景

Unity项目通常分为多个场景,用于实现游戏关卡。Unity允许用户在当前主场景附加载入场景。附加场景能够将场景模块化地组织为单独的对象层级,它是一个优秀的工具,。

我们通常使用附加场景来载入设备的特定玩家绑定,包含摄像机组件、输入设备和物理事件控件。为了保持主场景独立于设备,我们可能会同时使用带有SteamVR玩家绑定的附加场景和带有Daydream玩家绑定的附加场景。然后编写场景管理器脚本,当应用启动时,该脚本会根据实际目标设备来添加对应玩家绑定场景。

2 为SDK特定预制件使用条件对象

设备SDK包含预制件对象,可用于在场景中实现各种功能。示例包含:传送舱、视频播放器、环境绘图工具和Avatar等。

另一个示例,根据目标设备的不同特点,你或许想要拥有同一模型的低多边形和高多边形版本,因为不同设备和平台上的性能和质量需求不同。项目可以根据目标设备使用合适版本的预制件,预制件会在运行时实例化。

3 使用条件组件来实现SDK特定行为

设备SDK最特别功能是为游戏对象添加组件脚本来实现特定行为。例如:通常可交互对象会有抓取和突出显示的行为。然而在Unity中,根据条件给对象添加组件的功能没有简单的实现方法。

一种解决方法是将可交互对象的独立版本保存为预制件,然后使用上文中的条件对象方法来给场景添加正确的预制件。该方法能够完全保留同一对象的独立版本,因为每个设备SDK有一个相应的预制件。但是,如果你想修改原始对象则会带来维护问题。

Unity 2018引入了全新的预制件变体(Variant Prefabs)功能,它允许你定义从其它预制件资源衍生的预制件资源。你可以将原始游戏对象作为基础预制件,然后添加可交互组件制作变体,每个SDK都有一个相应预制件变体。最后你同样会得到每个目标设备相应的预制件变体,但是不同的是,对基础对象进行的改动也会影响变体。

开发干货 | Unity VR/AR项目优化技巧与工具

我们实现了一个更好的解决方案,称为Refab。 从某种意义上说,Refab与Variant Prefabs是相反的。Refab是一个可重用的组件集合,保存为预制件,可用于任何游戏对象。它们允许你将行为和对象分开,作为一个或多个用作游戏对象模板的组件。

Refab的工作方式如下:添加组件到空白游戏对象上,将其保存为预制件。可以通过Refab Loader组件将这组组件添加到任何游戏对象中。然后,场景中的对象会拥有Refab Loader组件来指向所使用的Refab,而不是SDK的特定组件。相同的可重用组件集也可以添加到其它游戏对象。

开发干货 | Unity VR/AR项目优化技巧与工具

下面是Refabs for Unity演示示例。

4 将设备特定输入事件映射为应用程序语义事件

除了玩家绑定、预制件和对象组件之外,你还应该将应用程序和设备特定输入事件分离。对于基于画布的UI输入,例如按钮,请尝试使用Unity的标准事件系统。

对于常见的对象交互,例如:抓取或投掷,设备特定SDK会直接管理用户手势或输入控制器、光线投射和触觉反馈。

为了将应用程序和SDK分离,请不要在应用程序中使用工具包特定事件。你应该将工具包特定事件映射为应用程序语义事件。语义事件(Semantic Event)是在应用程序上下文中有意义的事件。例如:你的应用程序或许只知道“该对象已被抓取”的意思,但无法对“按下左手触发器按钮”做出反应。

5 排除SDK文件夹以避免编译器和版本冲突

当构建针对特定平台导入了多个SDK的项目时,你或许会遇到编辑器或版本错误,这是因为插件库中存在冲突。此时需要删除未使用的冲突文件夹。还有一个解决方法是在名称后加入波浪号,例如:FolderName~,这样Unity就会无视该文件夹。

BridgeXR

通过使用以上五个技巧,你可以将应用程序从特定SDK中分离出来,使之独立于设备。应用这些技巧需要一些操作,但它们完全可以手动完成。而且,你还可以使用BridgeXR工具包进行更好的管理。

开发干货 | Unity VR/AR项目优化技巧与工具

BridgeXR工具包包含一系列编辑器内的实用工具,支持上文5个最佳实践技巧,功能如下:

Scene Bridge :可以根据当前活动的设备识别码,即Bridge ID,便捷地为当前场景选择性加载附加场景。当你将玩家绑定和其它设备特定对象层级加入场景时,该工具可以发挥很大作用。

Prefab Bridge:该工具可以基于当前活动的Bridge ID,在场景出生点选择性地实例化游戏对象预制件。当你拥有外形相似但是用于不同设备的不同预制件时,就可以使用该工具来处理,这类预制件包括传送点、视频播放器和细节层级对象。

Component Bridge :当你拥有根据目标设备定义复杂行为的不同组件集时,可以使用Component Bridge根据当前活动Bridge ID,选择性地添加一个或多个Unity组件到游戏对象。Component Bridges基于Refab实用功能开发,它是个为SDK特定组件实现常见行为的强大工具。

Input Event Mapping:它可以通过使用BridgeXR的事件发送器和接收器组件,将事件映射为应用程序特定语义事件,从而把核心应用程序和设备特定SDK输入事件分离。

Folder Exclusions:Folder Exclusions是一个编辑器内的工具,能让你在指向目标设备进行构建时,将特定文件夹从版本中排除。

在单独使用时,这些工具能发挥各自的作用。在结合使用时,它们将提供方法为你的Unity项目构建独立于设备的层。BridgeXR将帮助你管理项目中的多个SDK,而且不用处理版本控制分支或其它任务。

开发干货 | Unity VR/AR项目优化技巧与工具

小结

无论你是自己实现工具,还是使用BridgeXR这类实用工具,通过利用这些技巧,你可以继续使用自己了解和信赖的高级工具包,利用VR和AR主流供应商的优秀软件,并避免VR和AR工具SDK的分化对开发过程产生的影响。

关注微信公众号:VR陀螺(vrtuoluo),定时推送,VR/AR行业干货分享、爆料揭秘、互动精彩多。

开发干货 | Unity VR/AR项目优化技巧与工具

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

高性能JavaScript

高性能JavaScript

【美】Nicholas C. Zakas(尼古拉斯.泽卡斯) / 丁琛 / 电子工业出版社 / 2015-8-1 / 65

如果你使用 JavaScript 构建交互丰富的 Web 应用,那么 JavaScript 代码可能是造成你的Web应用速度变慢的主要原因。《高性能JavaScript》揭示的技术和策略能帮助你在开发过程中消除性能瓶颈。你将会了解如何提升各方面的性能,包括代码的加载、运行、DOM 交互、页面生存周期等。雅虎的前端工程师 Nicholas C. Zakas 和其他五位 JavaScript 专家介绍......一起来看看 《高性能JavaScript》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具