Unity与Android代码交互的方式

参考:

https://www.cnblogs.com/suoluo/p/5443889.html–看这个就行了

https://blog.csdn.net/cym492224103/article/details/39545523

unity调用android接口的两种方式:
  1. 多数使用的:
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的两种方法:
  1. 简单直接的:UnityPlayer.UnitySendMessage(“TestGameObject”, “Func”, str)。

  2. 首先在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("");
}
发布了24 篇原创文章 · 获赞 0 · 访问量 643

猜你喜欢

转载自blog.csdn.net/u014589770/article/details/105252160