• Unity_与android交互


    Unity调用Android代码

    方法一:

    //using让 Local Ref 回收
    using(AndroidJavaClass javaClazz = new AndroidJavaClass("com.ddianle.Bitmap"))
    {
        int res = javaClazz.CallStatic<int>("DrawText", 'a');//调用静态方法
    }
    public static int DrawText(char c)
    {
         return 1;
    }

    Unity调用Java方法时,参数或者返回值最好是Byte或者Byte[]。
    此方法的缺点是在Android平台容易造成Local Ref > 512的溢出Bug。(因为自己无法手动删除Local Ref)

    方法二:

    public static byte[] DrawText(String str, byte[] b)
    {
            return null;
    }
    IntPtr clazzPtr = AndroidJNI.FindClass("com/ddianle/Bitmap");
    IntPtr methodPtr = AndroidJNI.GetStaticMethodID(clazzPtr, "DrawText", "(Ljava.lang.String;[B)[B");
        
    //Two param
    IntPtr v1 = AndroidJNI.NewStringUTF("abc");
    jvalue j1 = new jvalue();
    j1.l = v1;
            
    IntPtr v2 = AndroidJNI.ToByteArray(Encoding.Default.GetBytes("abc"));
    jvalue j2 = new jvalue();
    j1.l = v2;
    IntPtr resPtr = AndroidJNI.CallStaticObjectMethod(clazzPtr, methodPtr, new jvalue[]{j1, j2 });//调用
    byte[] b = AndroidJNI.FromByteArray(resPtr);
    //...
            
    //删除Local Ref。methodPtr不需要手动删除,因为它不是一个jobject对象。   
    AndroidJNI.DeleteLocalRef(clazzPtr); AndroidJNI.DeleteLocalRef(v1); AndroidJNI.DeleteLocalRef(v2); AndroidJNI.DeleteLocalRef(resPtr);

    该方法可以手动的删除Local Ref,不过代码比较繁琐.

     Android调用Unity代码

  • 相关阅读:
    WPF自定义控件
    NPOI设置Excel单元格字体、边框、对齐、背景色
    关于StreamReader.ReadToEnd方法
    ASP.NET Core Web多语言项目
    docker与虚拟机的区别
    C# Task.Run 和 Task.Factory.StartNew 区别
    MVC的SignalR例子
    深圳游玩攻略
    一个域名下多个Vue项目
    Linq的执行效率及优化
  • 原文地址:https://www.cnblogs.com/penguin-panda/p/3273680.html
Copyright © 2020-2023  润新知