1、需求来源
这个需求来源于Unity和Android的交互,Android向Unity请求一个数据,拿到后执行某操作,由于要写一个工具,不能确定回调方法,这里提一下,理论上可以使用AndroidJavaProxy来实现这个需求,但是还没研究明白,所以采用回调的形式。 首先,作为一个Unity开发,对于回调的理解,C#完全可以把一个有参函数当做参数,但是Android没有这个写法,所以寻求其他方法。
2、解决思路
首先,提供一个接口,共使用者集成,必须实现回调方法,
userClass
staticClass
Unity
调用
发消息
调用
回调
继承
User实现回调
Interface
Static Method B
Static Method A
Unity
3、实现
3.1 java Interface
package com.unity3d.player;
public interface IDataCenter {
void setProgress(float progress);
}
3.2 java Class
package com.unity3d.player;
public class DataCenter {
static IDataCenter dataCenter;
public static void getProgress(IDataCenter _dataCenter) {
UnityPlayer.UnitySendMessage("cam_anim", "GetProgress", "unityCallback");
dataCenter = _dataCenter;
}
public static void unityCallback(float progress) {
dataCenter.setProgress(progress);
}
}
3.3 unity Class
private AndroidJavaClass dataCenterClass;
private void Awake()
{
dataCenterClass = new AndroidJavaClass("com.unity3d.player.DataCenter");
}
public void GetProgress(string methodName)
{
dataCenterClass?.CallStatic(methodName, progress);
}
|