【单目全景相机】Unity3D多平台SDK接入
2016.09.16
由于本人认知有限,如有错漏,非常欢迎同行指正交流。
QQ:454186694
什么是多平台SDK接入?
Unity3D一般使用C#语言来做开发,Mono做为虚拟机,管理C#或者C/Cpp编写的托管的代码。而对于不同的平台,有时候比较上层的代码执行效率并不是那么高或者有些功能实现就是需要平台支持,需要更底层的代码实现,那么涉及到Native代码的部分,如果C#需要调用,就需要使用到Plugins。这部分代码也叫作非托管代码。
以本项目为例,相机图片、视频的拼接、转码部分功能,就是和特定平台相关的,这部分代码是用C++来实现,然后编译为不同平台动静态库的方式接入,以供上层C#调用:
ipcamera.IOS.a:IOS上,只能编译成.a静态库,不支持热更新技术。放到Assets\Plugins\iOS下,没有就新建目录。
ipcamera.bundle:Mac OS X上编译成.bundle包。放到Assets\Plugins下。
ipcamera.dll:Windows上编译成.dll动态库。32位版本放到Assets\Plugins\x86下,64位版本放到Assets\Plugins\x86_64下。
ipcamera.so:Android上编译成.so动态库。放到Assets\Plugins\Android\libs下。
还有一种SDK就是C#调用Android.jar包的接入,需要用到Unity3D提供的两个类AndroidJavaClass和AndroidJavaObject。
接下来我自己写了一个demo,分别介绍各种不同SDK Plugins的接入和使用。
Unity3dPluginsDemo
对本篇文章感兴趣的朋友,可以到GitHub上下载到所有源码,包括Unity3D工程,其他动态库、静态库编译建立的工程:
工程源码:Unity3dPluginsDemo
包含有五种接入方式:
a. C++ CLR .dll(支持Windows、MacOSX、Linux);
b. C++ Native .dll(Windows平台);
c. Android jar .jar;
d. IOS .a;
e. MacOSX .bundle。
对应的五个工程如下图所示,用不同的软件打开就可以使用:
测试应用的运行效果如下所示,用U3D打包不同平台的应用版本,然后点击对应平台的button,就会返回相应的值:
C++ CLR接入
VS2015生成UnityPluginsCLR.dll放到Assets\Plugins\x86下,如果需要测试64位版本,可以用我上传的工程自己生成一个。
使用的时候首先要using UnityPluginsCLR引用命名空间:
调用的时候按照下面的方式即可:
C++ Native接入
VS2015生成UnityPluginsNative.dll放到Assets\Plugins\x86下,同理,如果需要测试64位版本,可以用我上传的工程自己生成一个。
使用的时候首先要DLLImport库文件和申明函数:
调用的时候按照下面的方式即可:
Android jar接入
Android Studio生成UnityPluginsAndroid.jar放到Assets\Plugins\Android下。
使用的时候需要用到c#提供的AndroidJavaClass和AndroidJavaObject两个类,如下所示:
IOS .a接入
Xcode生成libUnityPluginsIOS.a放到Assets\Plugins\IOS下。
使用的时候首先要DLLImport库文件和申明函数:
调用的时候按照下面的方式即可:
Mac OS X .bundle接入
Xcode生成UnityPluginsMacOSX.bundle包放到Assets\Plugins\MacOSX下。
使用的时候首先要DLLImport库文件和申明函数:
调用的时候按照下面的方式即可:
细心的读者会发现,这篇教程少了Android Native动态库.so的接入工程和方法,这部分待后续补上。
至此,Unity3D多平台SDK接入部分的介绍完成。