Unity2018之后与AS交互的几种方式探索和踩坑

这里只简单的描述步骤,主要是坑点

 

第一种       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调用----

  1. AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); //获取unity的Java类,只能调用这个类的静态方法,获取静态属性

  2. AndroidJavaObject jo = jc.GetStatic("currentActivity"); //获取当前的Activity对象,能调用公开方法和公开属性

  3.  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("mActivity");
    }
    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

目前还处在学习阶段  有错误的地方希望大家指出~~~

你可能感兴趣的:(Uinty&AS)