江苏专业网站推广公司哪家好/外贸营销型网站设计
01 应用场景
随着VR(虚拟现实)产业的井喷式发展,应用市场里各种VR应用层出不穷,对应用开发的需求急速增长。目前市场的主流引擎有UE4、CryEngine3、Unity 3D、VR Platform等,其中Unity 3D占据了绝对的领先地位,大多数应用使用Unity 3D引擎作为VR实现的工具。
02 什么是Unity
Unity 3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity 3D主要支持 3 种脚本语言:C#、JavaScript 、 Boo,其中在 Unity 5.0 后已经放弃对 Boo 的技术支持。使用 JavaScript 语言更容易上手,建议初学者选择 JavaScript 作为入门阶段的脚本编辑语言。到了进阶阶段,可以改用 C# 语言编辑脚本,因为 C# 语言在编程理念上符合 Unity 3D 引擎原理。
使用Unity 3D开发VR产品,必然与传统的Android项目开发流程有很大的区别,目前一般使用Unity来渲染3D模型,其他模块仍旧采用Android开发,制定一个Android和Unity的混合开发方案显的尤其重要。
03 混合开发方案
目前Android和Unity3D混合开发有两种开发模式。
1、Unity建好3D模型之后导出为Android项目开发:
首先在Unity中把模型设计好,然后在“Build Settings”下,选择需要导出的Scene,勾选”Export Project”,就可以导出一份Android结构的工程。然后在Android Studio中打开Unity导出的工程,编写业务逻辑,最终生成可运行的APK。
这种开发模式中Unity辅助Android开发,3D模型相对简单清晰,而Android端业务处理逻辑比较复杂,以Android开发为主。
2、Android端开发插件导入Unity开发
在Android Studio中开发library模块功能,然后Java部分打包成jar或arr文件,jni代码打包成so文件。把Android端开发的库文件放到Unity工程的“Assets\Plugins\Android”下,无此文件夹则需要首先手动创建文件夹。在Unity中进行3D模型设计,并和Android库文件交互,最终在Unity中生成可运行的APK。这种开发模式中Android辅助Unity开发,Android端业务处理逻辑相对简单清晰,而Unity处理比较复杂,以Unity开发为主。
两种开发模式没有绝对的优劣区别,都适用于VR应用开发,开发者可以根据具体的产品需求选择任一开发模式。对Android开发比较熟悉的可以使用模式一开发,对Unity比较熟悉的可以使用模式二进行开发,也可以在开发中混用两种模式。
04 Unity和Android交互
Unity负责3D模型的设计,Android负责业务逻辑的处理,同时需要彼此交互才能完成产品的开发。Unity的脚本语言是C#,Android的开发语言是Java,Unity和Android的交互就是C#和Java之间的交互。Unity运行在mono/il2cpp虚拟机中,而Android运行在dalvik/art虚拟机中,两者的交互就是两个虚拟机之间的交互,同一个进程中两个虚拟机之间的相互调用。
Unity调用Android
Unity中的Unity Engine提供了AndroidJavaObject与AndroidJavaClass两个类来分别访问Java的实例对象以及类对象,前者表示java.lang.Object或其子类,后者表示java.lang.Class。
下面将通过一段代码来演示如何获取一个AndroidJavaClass实例,并且调用其中的方法。
首先定义一个Java类
然后在Unity的C#脚本中访问Java类对象或者类的方法。
经过上面两步在Unity中就可以轻松访问Java了。
Android调用Unity
Android通过com.unity3d.player.UnityPlayer.UnitySendMessage方法显式调用Unity的方法。
在Java类中使用UnityPlayer.UnitySendMessage发送显示调用
在Unity中GameObject绑定的C#脚本里编写处理函数
经过上面两步Android就可以直接访问Unity的方法。
05 结束语
本文主要介绍了Android和Unity混合开发的两种模式,以及Android和Unity的相互通信,这也是目前业界主流的解决方案,基本满足VR应用的开发。随着技术发展和各种多样化产品需求,未来肯定会出现更先进的解决方案。
作者:米庆安
青榴实验室---超高清视频技术的传播者