大话HoloLens与Unity(上)
看过微软Academy Holograms 101课程的开发者都知道,我们推荐使用Unity进行HoloLens开发。为什么会选择Unity?究竟什么是Unity?Unity中的HoloLens项目和其他Unity项目到底有何不同?我们将分为上下两期探讨这些话题。
Unity是什么?
本章将先普及一点Unity的知识,以便于还未接触过Unity的朋友了解一些初阶概念。
Unity是一个全面专业的3D应用/游戏 开发引擎,最大的特色是采用了“基于组件”的设计方式,软件架构有别于传统的面向对象开发(Object Oriented Programming,简称OOP),习惯了传统软件模式的开发者需要适应一下。
基于组件的基本思路是:使用GameObject作为基础框架,但GameObject并不提供任何实际功能,所有功能全部由组件(派生于MonoBehaviour的各种类)实现,并能够任意插接到GameObject上,通过代码或编辑器操作均可。这样,GameObject就成为一系列组件的集合,能够完成各种复杂的功能。组件内部提供一系列预先定制的流程和接口,开发者可以在其中各个环节中添加各种逻辑,当组件插入到GameObject之后,会由GameObject统一调度这些流程和接口。
GameObject并不能独立存在,必须将其放入场景(Scene)中,GameObject才拥有生命周期,也就是说,GameObject是依赖于场景而存在的。事实上,GameObject在创建时就会被Unity自动放入当前激活的场景之中。不过,Unity提供一种预设体(Prefab)的机制,允许使用者将一个编辑好的GameObject存储下来,之后可以用拖拽的方式放入任何场景,使得GameObject成为可复用的预设元件。
(游戏对象、附加组件及场景之间关系)
Unity支持C#、JavaScript和Boo三种语言编写,但C#效率最高,结构性也最好,因此官方推荐使用C#进行开发。本文以及之后的文章,默认都将以C#作为开发语言。
Unity的具体特性和使用方法这里不再赘述,这方面已经有大量的文章可以参考。下面我们来关注Unity与HoloLens——
HoloLens运行什么应用?
在开发HoloLens应用之前,首先我们要知道,HoloLens运行的是什么应用。
HoloLens是Windows 10的设备,它运行的应用都是“通用Windows平台应用”,也就是“UWP应用”(Universal Windows Platform app)。理论上讲,任何能够运行Windows 10的机器,包括电脑、Surface平板、手机等,都能运行UWP应用,HoloLens只是UWP大家庭中的其中一员。
(UWP兼容环境)
了解了这一点之后,我们再来看下一个问题——
为什么推荐Unity?
选择推荐Unity开发因为它具有以下四种特性
易于开发
Unity最初的设计方向是一款3D编辑器,工程并不完全由代码实现,更多是在场景中编辑物体,其目的就是希望能让更多非技术出身的Designer可以使用。也因此,Unity的程序主要沿用的是脚本语言编程,除了C#之外还支持JavaScript和Boo,一些简单的功能只需要设置物体,添加一点脚本即可实现,这一点同Flash比较接近。当然,想要真正做出好的应用,还是需具备扎实的程序功底的开发人员参与,但不可否认,Unity这样的工具给更多开发者提供了很好的发挥平台。
HoloLens推荐使用Unity,也是希望能让更多有创意的设计师加入开发行列,毕竟HoloLens这样的MR设备涉及的领域相对前沿,在这个领域中没有既定的模式,需要靠大家的各种新创意来完善。而使用Unity可以大大增加HoloLens的开发者范围,让开发者将主要精力放在创意和应用功能上,而非维护底层代码。
完善的工具链
正如刚才所说,Unity的设计初衷就是一款3D编辑器,因此它可以说是先有工具后有引擎,工具链方面会有优势。涉及3D开发的方方面面都有便捷的功能,从基础的物体、光照模型、物理系统、粒子系统,到更高级的动画编辑器、动作状态机、寻路网格、反向动力学等等,大都可以用拖拽加配置参数的方式进行编辑。事实上,仅使用Unity内置的功能,就足以迅速做出一系列可执行复杂功能的Demo,这也使设计师可以最快的创造出产品原型,快速验证思路,找到不足并加以改进。
Unity还提供强大的编辑器扩展功能,使用者可以很容易的自己做出针对自定义数据和功能的编辑器。工欲善其事,必先利其器,这句老话在Unity的设计理念中得到了很好的体现。
(Unity内建动画状态机的编辑工具)
优秀的跨平台特性
因为Unity选择开源的Mono框架——可以横跨各种平台,不受制于任何平台的限制,这使得Unity从开发到发布应用都具有良好的跨平台性。
发展至今,Unity能够针对许多平台发布产品,除了主流的PC、Mac、iOS、Android之外,还包括UWP、XBOX、PS3/4、WebGL、甚至包括一些智能电视。这也是Unity越来越受欢迎的重要原因,以往需要跨平台的应用需要针对各个平台独立开发,现在只需要一个工程,就可以比较顺畅的发布到各个平台,需要做的只是针对少许平台独有内容进行包装。
(Unity发布界面中的平台选择)
你一定注意到了,上述的平台中包括UWP——这正是HoloLens所需要的,因此Unity可以很顺畅的发布到HoloLens,仅需要使用Visual Studio中转一层,并不需要在Visual Studio里设置任何内容。而且,Unity为HoloLens特别定制了一系列的接口,这也使得Unity和HoloLens联姻更加顺理成章。
AssetStore带来的扩展性
Unity的另一个备受称道的特性,就是AssetStore。简单的说,任何用Unity开发的模块,都可以简单的打包成Package,只要你有Unity账号,就可以放到AssetStore上,开出价格供大家随意购买。这一点上很类似Windows应用商店,只是发布的并不是完整应用,而是各种帮助开发的小模块。
这个设计对双方都有好处。对于购买者来说,很多已经比较成型的模块,小到一个JSON工具、一个Tween脚本,大到全套的复杂地形寻路解决方案,或者第一人称视角摄像机跟随方案,都能在AssetStore里找到,花费并不多的一点金钱,就能省掉大量的开发成本,真是分享式经济的良好体现。当开发者面对一个功能需求的时候,通过在
AssetStore搜索是否有现成的解决方案使用,往往能更快的产生原型,节省大量的开发和试错的时间。
(AssetStore界面)
了解到这些之后,对于刚接触Unity的开发者来说,应该对Unity开发特性具备了一些基本概念,而在下篇文章中基于这些特点说明用Unity开发HoloLens应用与开发其他设备的应用有什么不同,希望能进一步解决大家HoloLens开发中的一些困惑。