Unity与Android交互小结
使用形式
Unity导出到Android
Unity默认导出的apk是全屏的游戏,如果对其展示形式、生命周期、衍生功能等有定制需求时使用此方法。
Unity构建的时侯不直接导出apk,而是导出Android工程,然后将assets文件夹、so文件、unity-classes.jar复制到安卓工程下,再进行开发。
一般在Android代码中addview添加unityplayer实例,并注册resume、pause、injectEvent、onWindowFocusChanged等几个关键的事件。可参见unity-classes.jar中的UnityPlayerActivity.java的实现。
android导出到unity
将android的代码编译成jar包,放入unity中供调用。一般用于友盟统计等需求。
方法是,在unity工程的Assets目录下新建Plugins\Android文件夹,将编译后的jar包放进去。
通讯方式
Android调用Unity
只有一种方法:
|
|
Unity调用Android
方法较多,但大都围绕两个类AndroidJavaClass和AndroidJavaObject:
网上教程大都是这种,获取某个实例的某个对象然后进行操作:
|
|
然而实际中还是下面这种实用,单独开一个类,直接调用其静态方法:
|
|
对应Android端的代码为:
|
|
Android调用Unity时没有返回值,而Unity调用Android则是可以添加返回值的,所以上面的代码可以改成这样:
|
|
对应Android端的代码也需要将返回值改为String即可。
通讯方式实践
首先定义两遍通讯通用的消息结构:
|
|
1.两边定好消息id(MsgID)和对应消息的结构体(java类)。
2.在Android调用Unity时,将MessagePOJO对象用Gson序列化成字符串,通过UnityPlayer.UnitySendMessage传给Unity。
3.Unity接到消息后,用MessagePOJO结构体反序列化json,先得到MsgID,然后用对应的其他结构体反序列化MsgBody。
4.Unity将MessagePOJO序列化成String,然后调用AndroidJavaClass.CallStatic传递给Unity。
5.Android接到消息后,用MessagePOJO结构体反序列化json,先得到MsgID,然后用对应的其他结构体反序列化MsgBody。
Unity和Android对应的消息分发/处理逻辑看业务需求和个人便好,不再赘述。
EOF