Unity调用Android
一、关于AndroidJavaClass和AndroidJavaObject
1、AndroidJavaClass是获取到一个具体的类。例如:AndroidJavaClass jc = new AndroidJavaClass(com.abc.b.a); com.abc.b是包名,a是具体的Java类。然后jc就可以调用a类中的静态函数了,类似于C#之中的调用静态函数的方式。当然,也可以获取静态变量。
这个时候,要想获取实例来调用非静态函数,则可以在Java类中写一个单例函数,然后使用下面类似代码获取。AndroidJavaObject jo = jc.CallStatic<AndroidJavaObject>("GetInstance"); 然后用jo来调用实例方法(也就是非静态函数)。
2、AndroidJavaObject是直接构造一个Java类的实例对象,new AndroidJavaObject(参数1,参数2) 参数1是要实例化的对象,包名+Java类(字符串类型,例如:com.unity3d.player.a)。参数2是Java类的构造函数的参数。然后就可以用jo来调用非静态函数了。
当然,Java中的内部类也可以用这种方式取得。例如 AndroidJavaObject jo = new AndroidJavaObject("java.lang.String"); AndroidJavaObject jo = new AndroidJavaObject("java.util.HashMap");等等
3、Unity调用Java类中的函数时,关于传参的问题。
如果想要传入System.String,那么直接传入String参数即可。System.String指的是C#的类型,在Java中的函数中的参数中的参数类型为String。
如果想要传入System.Double,那么直接传入Double参数即可。System.Double指的是C#的类型,在Java中的函数中的参数中的参数类型为double。注意:Java中参数类型是开头字母小写的double,而不是开头字母大写的Double(java.lang.Double类)
如果想要传入Dictionary,那么需要注意键值对的参数类型,可以创建一个Java类,这个Java类包含了HashMap变量和对HashMap变量进行操作的函数,然后再由Unity调用这些函数,将Dictionary中的内容传入这个Java类中的HashMap。如下所示:
package com.unity3d.player;
import java.util.HashMap;
public class CustomEventDictionary {
public HashMap<String,Object> hashMap;
public CustomEventDictionary()
{
hashMap = new HashMap<String,Object>();
}
public HashMap<String,Object> GetHashMap()
{
return hashMap;
}
public void put(String key, Object value)
{
hashMap.put(key,value);
}
public void put(String key,String value)
{
hashMap.put(key,value);
}
public void put(String key,double value)
{
hashMap.put(key,value);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律