注意:unity3d与原生代码的调用需要pro版本,此点注意了。
一、IOS平台,由于IOS平台的原生应该是objectC,所以通讯起来非常的简单,
1、原生代码调用u3d代码:
1.1、在Xcode项目上调用unity3d自带的dll框架,使用其中的发消息命令(UnitySendMessage)就可以向u3d的代码里发送事件消息了,这里第一个参数便是u3d约定的gameObject对象名和函数名,第三个参数是额外的消息参数。
1.2、然后是接收端,也就是unity3d这里的代码 ,这里需要在unity3d那里定义一个对象,对象的名称是xcode那里发消息事件所约定好的,然后在gameObject上挂上一个脚本,这里的脚本名,也就是类名无关系,因为发消息只认函数名不认类名的,函数名要定义成静态的方法,这样才能被原生的代码所找到,然后就完成了整个事件的通讯了
2、U3D调用原生代码
2.1、在Xcode项目使用DllImport和extern关键字定义好一个静态的方法,这个方法到时供u3d所调用
2.2、在u3d项目里使用extern c方法来调用xcode项目的方法,这里的方法名要与xcode里的方法名保持一致,当然此方法也必须是静态的。
具体的官方说明:
http://docs.unity3d.com/Documentation/Manual/PluginsForIOS.html
二、android的原生代码通讯:
1、如果迩是使用NDK开发那就简单了,其实和xcode的object-c差不多,因为ndk是使用c++开发的所以类c之间和通讯都差不多。
2.1、但是基于目前的公开android的api,多数为java语言的,这部分就比类c语言通讯复杂得多,讲解这部分狠麻烦,好在unity公司提供了一个样例在asset store里可以参考,另外unity公司也提供了相关的api来供java语言和c#语言的通讯,这几个类在unity3d的官方脚本都可以找到,都是以android打头的类,专司这档事,这样子利用这些API使得java与c#之间的通讯可以在一定程度上简化。另外一个android通讯
2.2、另外一个android的难点在于AndroidManifest.xml,这个文件相信搞过android开发的都弄过,这里是配置一些android原生属性的一些方法,这里的问题在于,当迩有几个android插件的时候,请把他们的androidManifest.xml的数据合并成一个文件,不然产生的配置会发生冲突
这里是官方讲解android与unity3d之间通讯的页面:http://docs.unity3d.com/Documentation/Manual/PluginsForAndroid.html
这里有一个google play原生功能调用的示例,可以从asset store这里下得来观摩,这里有关于unity代码的源代码和java端的源代码之间的互相调用,地址是https://www.assetstore.unity3d.com/#/content/3190