参考:
https://www.cnblogs.com/suoluo/p/5443889.html–看这个就行了
https://blog.csdn.net/cym492224103/article/details/39545523
unity调用android接口的两种方式:
- 多数使用的:
if(GUILayout.Button("test",GUILayout.Height(100)))
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("AndroidFunction","teststring");
}
这种方式需要修改android主activity让其继承UnityPlayerActivity,通过获得的jo调用该activity中的各种接口。
2.在android工程中不修改任何代码,直接在src中新建普通class(当然也可以放在新建的包中),不需要继承任何类,直接写入你需要提供给unity调用的接口,后面unity调用方式如下:
if(GUILayout.Button("test",GUILayout.Height(100)))
{
AndroidJavaClass jc = new AndroidJavaClass("com.package.package.YourNewClass");
//或者AndroidJavaObject jo = new AndroidJavaObject("com.package.package.YourNewClass");
jc.CallStatic("AndroidFunction","teststring");
//或者jo.CallStatic("AndroidFunction","teststring");
//方法无论是public还是private都可以调用到,如要调用非static的方法则只能使用jo
}
当你有多个插件SDK需要接入时就可以分别写在不同的类中,以降低偶合。当然如果SDK有UI交互则仍是需要activity的(在android中需要获得当前unity的activity可以通过UnityPlayer.currentActivity获得)。
android回调unity的两种方法:
-
简单直接的:UnityPlayer.UnitySendMessage(“TestGameObject”, “Func”, str)。
-
首先在Java中定义接口,例如:
public interface IMyCallback {
void OnDone();
void OnDoneWithArg(String arg1);
}
然后通过AndroidJavaProxy在C#中实现接口,例如:
class AndroidMyCallback : AndroidJavaProxy
{
public AndroidMyCallback()
: base("com.mygame.IMyCallback")
{
}
public void OnDone(AndroidJavaObject result)
{
}
public void OnDoneWithArg(string arg1)
{
}
}
在C#中实例化这个接口类型,并传递给Java:
javaClass.CallStatic("InvokeWithCallback", new AndroidMyCallback());
最后在Java里面回调该接口:
public static void InvokeWithCallback(IMyCallback callback) {
callback.OnDone();
callback.OnDoneWithArg("");
}