美文网首页
unity-android交互坑指引

unity-android交互坑指引

作者: lotawei | 来源:发表于2018-11-15 15:55 被阅读28次

Unity接入Android交互的方式

开始接入最初最好在YouTube一个教程上将unity和Android 的交互基本接入方式走一次,然后明白jar方式如何交互的,会少走许多坑
1.使用gradle的方式则需要使用Androidstudio 打出最终包测试. 主要核心在Android下编写sdk 核心流程:有两种

a.unity 下实现唤起sdk unity 下实现Android sdk回调则完成 剩下的unity去操作
b.unity实现唤起sdk, android唤起unity脚本挂载函数(这种其实没必要,而且也不好,sdk管sdk,unity 管 unity 没必要 你调我我调你,所以不采用,当然头铁的要弄个arr去搞应该还是可以)

然后更新的话,每次的更新都需要更新到maven (这块需要看看如何将Android sdk发布到maven)上才能测试新功能,这种方式还比较好一点,主要在Android上做开发.unity 中接入控制游戏界面的业务逻辑结合sdk的回调做界面的处理.这种方式(指的是a这种方式)相对来说思路比较清晰不用处理太多的编译问题(没摸过的话当然坑还是很多的).

(1)在unity中合适的地方唤起调用Android 的渠道
核心类 AndroidJavaClass

 if (Application.platform == RuntimePlatform.Android)
        {

            using (AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
            {
                AndroidJavaObject activityContext = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
          

                Debug.Log("has activity");
            }



            AndroidJavaClass cls = new AndroidJavaClass("com.xxx.rad");
            Debug.Log("has found cls");


            //int res = cls.CallStatic<int>("addSum", 8);
            //Debug.Log("res:" + res.ToString());


            //AndroidJavaClass  instance =  cls.GetStatic<AndroidJavaClass>("instance");
            //string res2 = instance.Call<string>("curinfo");
            //Debug.Log("res2:" + res2.ToString());
            AndroidJavaClass javacontext = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject activity = javacontext.GetStatic<AndroidJavaObject>("currentActivity");
            if (activity != null)
            {

                AndroidJavaObject instance = cls.CallStatic<AndroidJavaObject>("getInstance");
                instance.Call("Login", true);

            }
            else
            {
                Debug.Log("made");
            }
        }

(2)实现Android渠道操作完成的回调
核心类AndroidJavaProxy 脚本需要实现sdk的回调

class DateCallback : AndroidJavaProxy
    {
        public DateCallback() : base("android.app.DatePickerDialog$OnDateSetListener") {}
        void onDateSet(AndroidJavaObject  object, int year, int monthOfYear, int dayOfMonth)
        {
            selectedDate = new DateTime(year, monthOfYear + 1, dayOfMonth);
        }
    }

2.使用arr方式调用不使用gradle有些麻烦
开发流程则是Androidstudio开发出arr包 ,导入只unity 路径 Assets->Plugins->Andorid目录下 为了测试方便gradle中使用gradle 替换用于方便最开始的快速测试 你可以使用gradle构建自动运行脚本进行unity 插件替换,方便测试在unity下arr是否能很好的工作,这种方式还需要扣除arr中的unity-class.jar包, 同样的是两步 需要unity合适的地方唤起,实现arr包的接口,但这样比较麻烦.测试起来都不太好弄,更麻烦的是更新sdk的时候.测试调试都是很繁琐的事. 这种方式没试过,因为想想各种依赖就很难受,各种依赖版本多的时候,你或许根本不知哪个依赖出问题了.


task occurNewArr(type: Copy){

    from "/Users/lotawei/Desktop/unityscene/amuseframwork/build/outputs/aar/amuseframwork-debug.aar"
    into "/Users/lotawei/Documents/unity/unityscene/Assets/Plugins/Android/"
    rename 'amuseframwork-debug','app-debug'
}
task deleteOldArr(type: Delete){
    delete "/Users/lotawei/Desktop/unityscene/amuseframwork/build/outputs/aar/amuseframwork-debug.aar"
    delete  "/Users/lotawei/Documents/unity/unityscene/Assets/Plugins/Android/app-debug.aar"
}

其中测试的坑吧 所有方法都是通过字符串反射机制实现的,所以呢所有方法sdk写好的,还请千万不要自己写 一定要copy paste , 这种如果是项目比较大的游戏,光是编译打包就会很长时间,遇到这种不熟的建议先摸摸门路 Android unity交互的指南(照着弄吧网上教程很多的,指到南的地方,北斗找不到了hha).将一些环境摸一下,基础环境能跑通了,最好一次性把所有业务写通吧,不然的话所有的更改发布测试你又得再走一遍(不厚道的笑了笑).

Tips:明白一些交互原理机制大概是很重要的对你来说.unity 选择gradle方式导出工程支持的并不会将这些你需要的依赖放进unity整包,因为这种方式目的主要是让你以Android studio来构建你的应用依赖管理,但是arr和lib以及resource相关资源会放进来,因此在这套模式构建下切勿重复打入一样的包.额外说一句unity与Android交互是通过unity-classs.jar进行交互的,打包的时候会自动将unity-classs.jar导入的,因此不要在自己的库里面引入unity的jar包去做unity 的封装,这就是给你自己找麻烦。
可能遇到的问题:gradle 找自己的依赖弄死找不到
//一定要放到allprojects 下 这个build是整个工程目录下的gradle 放在buildscript等呢你是找不到的,
//因为unity打出来的包跟新建的Android 项目结构有点不一样, 新建的普通的gradle会有两个一个整个工程的 一个app 对应的gradle. 而unity打出的包只有一个gradle
//然后呢一定记得加上google() 和jcenter()
allprojects {    repositories {        maven {            url "自家的maven库地址"        }        google()        jcenter()        flatDir {            dirs 'libs'        }    }}

dependencies{
        implementation   'xxxx.xxx.xxx:mm:1.0.3'
        
}

剩下的注意版本号,最低版本和sdk的兼容了.应该没什么大问题了,然后愉快的写代码加测试吧

相关文章

  • unity-android交互坑指引

    Unity接入Android交互的方式 开始接入最初最好在YouTube一个教程上将unity和Android 的...

  • Unity—Android通用SDK(交互)开发流程

    现在网上的unity-Android交互,多半在安卓工程中继承UnityPlayerActivity来写,这样写也...

  • 验证码获取与验证的服务流程设计思考

    《系统界面指引规范》是目前工作中的一个内部规范文本,目的在于规范自己部门所负责的一些系统功能界面的指引性交互设计。...

  • Unity-Android调试指南

    1 缘起 最近实验室在基于unity平台开发一款应用,需要有Windows端和Android端两个版本。之前的常态...

  • vue搭建的h5页面跟app(安卓、IOS)交互

    关于h5交互 首先这也是我第一次做关于关于跟app交互的东西,也是摸撞了很多坑,首先做交互在h5页面是看不...

  • 航模新手入坑指引——1

    、本人发现简书好像很少关于航模的教学文章,所以借此我想写一些关于航模新手入坑的教学,希望志同道合的朋友们一起来玩耍...

  • 航模新手入坑指引——2

    上期我们介绍了关于新手板机的各个组件,具备了一定的知识基础了。这期可能比较简短,因为我不在航模社啊,我决定下期再讲...

  • iOS开发-与ReactNative交互时bridge is n

    上次说到了与RN交互时,RN引用原生UI组件时出现的坑,如果说上次的坑是因为没有仔细看官方文档导致的,这次的坑应该...

  • Android与JS交互

    现在越来越多的App是混合开发,很需要原生与网页交互,下面介绍如何交互以及有可能出现的坑。 Java调用JS方法 ...

  • Android与Js交互

    现在越来越多的App是混合开发,很需要原生与网页交互,下面介绍如何交互以及有可能出现的坑。 Java调用JS方法 ...

网友评论

      本文标题:unity-android交互坑指引

      本文链接:https://www.haomeiwen.com/subject/mjlyfqtx.html