Open alwaystest opened 8 years ago
标签(空格分隔): 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下,调用即可。
Assets/Plugins
但是在OSX开发环境下试运行会一直报一个错误,DllNotFoundException。
DllNotFoundException
按照网上现有的资料,一一排除了x86和x64不匹配,DLL放置位置错误,最后发现OSX并不是使用DLL的,原生插件需要根据各个平台生成对应的库,并且放置在对应的文件夹下,OSX需要的是一个叫bundle的东西。
bundle
经过测试,将CPP文件使用Xcode编译成***.bundle,放到Assets/Plugins下,运行,不再报错。
***.bundle
可能使用Windows开发Unity3D的开发者太多了,很少有人顾及到OSX下的操作。
需要按平台编译出对应的动态链接库。
Windows ==> ***.dll
OSX ==> ***.bundle
Android ==> libxxx.so
IOS ==> *.h && *.m (CPP to .m待研究)
另: Unity5.4 新特性 Android支持 IL2CPP(实验性特性)。IL2CPP是趋势,稳定的话就可以省好多事了。
Windos下编译DLL不一定非要是Visual Studio, 使用别的软件可以编译出DLL来也可以(虽然我不知道还有别的什么软件可以编译出DLL来,GCC算不算?)。
参考:
Unity3D插件开发--Youtube
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