Skip to content

hellowod/u3d-plugins-development

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

90 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Unity原生态插件开发 🤘🤘🤘

GitHub stars GitHub forks GitHub issues GitHub release GitHub license

Unity可以开发两种插件,Managed plugins和Native plugins。

Managed plugins 是托管式.NET插件,使用对应Unity的.NET版本进行开发。

Native plugins 平台相关的原生插件,可以访问操作系统的插件或者第三方的插件。

在Unity5之前,通过插件存放的目录来区分支持的目标平台;然而Unity5可以把插件放 在任何目录,通过Plugin Inspector设置相关属性就可以了,但为了兼容以前的版本, Unity5也会支持插件存放的目录,进行默认的插件设置。

规则如下:

文件夹	                                                默认插件设置
Assets/**/Editor	                                    只兼容Editor
Assets/**/Editor/(x86 or x86_64 or x64)	                只兼容Editor,如果子文件夹存在,用于匹配目标CPU
Assets/Plugins/x86_64(or x64)	                        x64兼容
Assets/Plugins/x86	                                    x86兼容
Assets/Plugins/Android/(x86 or armeabi or armeabi-v7a)	只跟Android兼容,如果子文件夹存在,用于匹配目标CPU
Assets/Plugins/iOS	                                    只跟iOS兼容

托管插件(Managed plugins)

通常情况下,我们直接使用脚本实现相关功能,然后由Unity编译成目标可执行文件。但有 时我们想在外部把脚本编译成DLL,然后放在Unity中使用。这个DLL就是这里所说的托管式 插件,兼容.NET二进制。

托管插件相对来说比较常见,也是项目开发中比较常见的方式,文章结尾的unity-plugins-development 项目也给出了简单的托管插件的案例,敬请参考。

原生插件(Native Plugins)

原生插件一般采用C,C++,Objective-C等等编写,Unity允许游戏代码来访问这些原生插件中的函数, 允许Unity和一些中间件库或者已有的C/C++进行整合和。

C原生插件

这类插件是使用C或者是C++语言编写的插件,这类插件有点是兼容所有平台,集成方便,使用简单。重要的 案例如大家在游戏开发中使用tolua,slua,xlua插件都是基于这种方式插件。

System原生插件

系统插件,顾名思义,就是和操作系统相关的插件,Unity引擎跨平台特性是其非常重要的特点,但是无论 跨平台做的如何突出,也总有一些系统特殊接口是引擎没有考虑接口,这些接口就需要编写原生系统插件进行 支持。

  • ios 系统插件

    使用Object-C开发的iOS库,支持iOS相关特性的插件,如震屏,手机电量,信号强度等。

  • android 系统插件

    使用Java开发的Android库,支持Android相关特性的插件,如震屏,手机电量,信号强度等。

Demo

  • src/managed

    托管插件

  • src/native/c

    C原生插件,实现了C#调用C和C调用C#,即相互调用。

  • src/native/system/android

    Android系统原生插件

  • src/native/system/ios

    iOS系统原生插件

注意事项

项目中C原生插件编译采用CMake插件进行编译,关于CMake介绍这里补充一下,相对来说, CMake比make编译工具要复杂的多,中文的资料相对比较少,这里推荐几篇文章感兴趣的可 以阅读一下:

CMake cmake 学习笔记(一,二,三) 和大多数资料相比,这篇写的更加的通俗易懂,如果大家还是觉得使用起来比较陌生,后面 会专门单独一个git项目演示CMake是如何实现扩平台编译的。

参考资料

unity-plugins-development Github

Unity Manual

Unity Plugins

Building Plugins for iOS

Building Plugins for Android

Building Plugins for Desktop Platforms