alwaystest / Blog

24 stars 2 forks source link

Unity3D Native Plugin #22

Open alwaystest opened 8 years ago

alwaystest commented 8 years ago

Unity3D Native Plugin

标签(空格分隔): Unity3D


由于Unity3D目前使用Mono完成跨平台,编译非IOS平台的软件的时候生成的是IL(中间语言),使得生成的软件很容易被反编译而看到实现的逻辑。如果一些关键部分的代码不想被别人轻松看到,就需要使用别的语言比如C++,C,Objective-C来编写这部份代码,然后通过C#来调用,这样就可以提高一些安全性。但是没有攻不破的盾,我赞同只需要防住大部分的初级破解手段即可。

Unity3D的Plugin分为两种,一种是以C#语言编写,生成DLL(托管式插件)。一种是C,C++,Objective-C等编写的原生插件。

以使用C++编写原生插件为例。

在网上查找相关资料的时候发现网上现有的资料大部分都是选择使用Visual Studio来编译C++的代码,将生成的DLL文件直接放到Assets/Plugins下,调用即可。

但是在OSX开发环境下试运行会一直报一个错误,DllNotFoundException

按照网上现有的资料,一一排除了x86和x64不匹配,DLL放置位置错误,最后发现OSX并不是使用DLL的,原生插件需要根据各个平台生成对应的库,并且放置在对应的文件夹下,OSX需要的是一个叫bundle的东西。

经过测试,将CPP文件使用Xcode编译成***.bundle,放到Assets/Plugins下,运行,不再报错。

可能使用Windows开发Unity3D的开发者太多了,很少有人顾及到OSX下的操作。


关键:

需要按平台编译出对应的动态链接库。

Windows ==> ***.dll

OSX ==> ***.bundle

Android ==> libxxx.so

IOS ==> *.h && *.m (CPP to .m待研究)

另: Unity5.4 新特性 Android支持 IL2CPP(实验性特性)。IL2CPP是趋势,稳定的话就可以省好多事了。


Tips:

Windos下编译DLL不一定非要是Visual Studio, 使用别的软件可以编译出DLL来也可以(虽然我不知道还有别的什么软件可以编译出DLL来,GCC算不算?)。


参考:

Unity3D插件开发--Youtube