无需导入Unity的classes.jar包和UnityPlayerActivity类文件
地址记录:【Unity教程】如何实现Unity和Android原生互相调用?_unity调用android方法_3DCAT实时渲染云的博客-CSDN博客
package com.unityandroidsdk.test;
import android.app.Activity;
import android.widget.Toast;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TestActivity {
private Activity unityActivity;
private Activity getActivity(){
if (null == unityActivity){
try{
//反射获取到Unity的activity实例
Class <?> classType = Class.forName("com.unity3d.player.UnityPlayer");
Activity activity = (Activity)classType.getDeclaredField("currentActivity").get(classType);
unityActivity = activity;
} catch (IllegalAccessException e) {
System.out.println(e.getMessage());
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
} catch (NoSuchFieldException e) {
System.out.println(e.getMessage());
}
}
return unityActivity;
}
/**
* Andriod 调用 unity的方法 (反射法)
* 1.调用的GameObject的名称
* 2.方法名
* 3.参数
* 4.调用是否成功
*/
public boolean CallUnity(String gameObjectName,String functionName,String args){
try{
//反射获取到Unity的UnitySendMessage方法
Class <?> classType = Class.forName("com.unity3d.player.UnityPlayer");
Method method = classType.getMethod("UnitySendMessage", String.class, String.class, String.class);
method.invoke(classType,gameObjectName,functionName,args);
return true;
} catch (InvocationTargetException e) {
System.out.println(e.getMessage());
} catch (NoSuchMethodException e) {
System.out.println(e.getMessage());
} catch (IllegalAccessException e) {
System.out.println(e.getMessage());
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
}
return false;
}
/**
* 供unity调用,弹出一个view tips
* @param content
* @return
*/
public boolean ShowToast(String content){
Toast.makeText(getActivity(),content,Toast.LENGTH_SHORT).show();
CallUnity("Bridge","NativeCallbackUnity","[TestActivity]hellow unity,i`m android");
return true;
}
}