zoukankan      html  css  js  c++  java
  • 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代码

  • 相关阅读:
    Stm32高级定时器(一)
    AES算法简介
    vsim仿真VHDL输出fsdb格式文件
    ncsim仿真VHDL
    云贵高原骑行
    触发器(笔记)
    几种常见的十进制代码(笔记)
    时序电路分类
    组合逻辑电路和时序逻辑电路比较
    数字电路基础(网络整理)
  • 原文地址:https://www.cnblogs.com/penguin-panda/p/3273680.html
Copyright © 2011-2022 走看看