这里只简单的描述步骤,主要是坑点
第一种 AS导出Jar包到Unity
1,新建一个AndroidStudio空项目,包名要和Unity3D的包名一样
2,导入unity的jar包到空工程
3.修改MainActivity继承UnityPlayerActivity
4.修改build.gradle 导出jar
坑点::很多教程没明确要求 要在AndroidMainfest里把默认启动的Activity改成MainActivity ,如果没改在unity中get currentActivity的调用无法调用到MainActivity 的方法 因为MainActivity 继承于UnityplayerActivity,这时unity get到的类其实是UnityplayerActivity,所以要把默认的activity换成MainActivity
Unity调用----
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); //获取unity的Java类,只能调用这个类的静态方法,获取静态属性
AndroidJavaObject jo = jc.GetStatic
jo.Call("***"); //调用
第二种 Unity导出AS工程
这种方式如果不做修改 直接在UnityPlayerActivity里修改是可以访问到的 ,但是这个类每次打包都会变回默认的 所以一般要写到另外一个类里来提供给Unity,也要在AndroidMainfest里把默认启动的Activity改成你自己的
// 继承自自动生成的UnityPlayerActivity进行我们自定义的代码编写
public class UnityActivity extends UnityPlayerActivity{
// 自身的引用
public static Activity mActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = this;
}
// 暴露给unity的方法
public void method(){
}
}
unity中调用方式为:
private AndroidJavaObject m_activity;
void Awake()
{
// 获取自己定义的Activity的实例
AndroidJavaClass jc = new AndroidJavaClass("自定义的Activity所在的包名.UnityActivity");
// 拿到mActivity变量
m_activity = jc.GetStatic
}
public void callAndroidMethod() {
// 调用Android中暴露的方法
m_activity.Call("method");
}
原因?
为什么不是用unityplayer访问了呢? 因为UnityPlayerActivity在Activity中实例化了一个UnityPlayer 对象,且把Activity自身作为参数将UnityPlayerActivity的引用赋值给了一个静态变量currentActivity,currentActivity是UnityPlayerActivity的引用。我做交互的时候自己写了一个类UnityActivity继承UnityPlayerActivity,unity中调用的方法都写在了UnityActivity中。currentActivity 是父类引用,调用不到子类UnityActivity中的方法,因此交互是无法做到的,如果按照这篇博客中的方法,所有的交互都必须写在UnityPlayerActivity中。虽然这样没有什么错误,但是毕竟UnityPlayerActivity是自动生成的,在里面直接写我们的代码不太好。
第三种 直接将java代码放到Unity的plugins --android 目录下 调用,,
目前这种我还没试过 参考别人的博客~
连接: http://zglbk.cn/blog/39
链接:https://blog.csdn.net/YuAnHandSome/article/details/83827768
目前还处在学习阶段 有错误的地方希望大家指出~~~