以下提及的Java代码代指Android Studio 中的代码,C#代码代指unity中的代码
Android Studio 中 Java 调用 C# 的方式
1. 引用Unity库文件 使用unity提供的UnitySendMessage()方法
参考博文:https://www.cnblogs.com/godshadow/p/14854767.html
弊端是必须将代码挂在某个组件上。对于需要热更的部分就不太友好了。
2.使用接口继承,对象传递的方法
虽然麻烦,好处是随处可用。方便热更!
在Java中定义一个接口 IAndroidCallbackListener
public interface IAndroidCallbackListener {
void DebugLog(String msg);
void OnCreated(Object javaObject);
void OnDeletedLive(String id);
}
在C#中继承 AndroidJavaProxy 并实现接口 IAndroidCallbackListener
public class IAndroidCallbackListener : AndroidJavaProxy
{
public IAndroidCallbackListener() : base("com.strawberry.mylibrary.IAndroidCallbackListener") {
}
public void DebugLog(string msg) {
Debug.Log(msg);
}
/// <summary>
/// 用于传递Java中的实例对象
/// </summary>
public void OnCreated(AndroidJavaObject javaObject)
{
Debug.Log(msg.ToString());
var kCurrentActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
javaObject.Call("OnInit", kCurrentActivity);
}
public void OnDeletedLive(string msg) {
}
}
使用时 需要在 C# 中创建实例化然后对象传递至Java中使用。
IAndroidCallbackListener m_kAndroidCallBackListener = new IAndroidCallbackListener();
.......
var kCurrentActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
m_kUnityHelper = new AndroidJavaObject("com.strawberry.mylibrary.UnityHelper");
// 传递IAndroidCallbackListener 对象
m_kUnityHelper.Call("OnInit", m_kAndroidCallBackListener, kCurrentActivity);
public void InitSDK(IAndroidCallbackListener listener,Object jo) {
_UnityListener = listener;
_UnityListener.DebugLog(TAG + "启用 InitSDK 成功");
}
Unity 中 C# 调用 Java 的方式
参考Unity 官方文档 :AndroidJavaObject
AndroidJavaObject javaObjec;
......
javaObject.Call("OnInit", kCurrentActivity);