unity学习笔记-unity(2019)嵌入安卓开发-实现相互跳转

Unity学习笔记

  • Unity(2019)嵌入安卓开发-实现相互跳转
    • 思路
    • 流程
      • 先在unity中添加跳转到安卓的方法
      • AS配置unity的信息
      • as添加跳转至unity的方法
      • as添加unity跳转到app的方法
    • 调试的方法
      • pc上
      • 手机上

Unity(2019)嵌入安卓开发-实现相互跳转

思路

先将unity打包成as能识别的文件格式,里面需要包含从unity跳转到安卓原生界面的方法。然后在as中导入unity打包好的模块,添加一些配置信息,添加从原生安卓界面跳转到unity的方法,最后打包apk测试即可

流程

先在unity中添加跳转到安卓的方法

	AndroidJavaObject jo;
    public Button btn;
    private void Awake()
    {
     
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        btn.onClick.AddListener(CallAndroid);
    }
    public void CallAndroid()//这个是从unity跳转到原生app界面的方法,这里用到的个人的理解是反射的原理,通过在unity获得java的反射从而调用他的方法(纯粹个人猜测)
    {
     
        jo.Call("ShowToast");
        Debug.Log("点击按钮");
        System.Console.WriteLine("点击按钮");
    }

注意在这里插入图片描述
这两坨是不能改的(看大佬的帖子是这么说的,还没试过修改)
然后在场景中添加一个button的ui,把脚本挂载到场景中的某个物体,然后把button挂载到脚本上即可
然后打包unity学习笔记-unity(2019)嵌入安卓开发-实现相互跳转_第1张图片
2019是这么操作的,由于项目升级,2018的打包方式和2019是不一样的,18的话点击gradle打包方式就可以了

AS配置unity的信息

这里可以看下面这两个大佬的帖子,写的很详细,跟着做就行了

https://blog.csdn.net/weixin_43271060/article/details/109547834
https://blog.csdn.net/qq_45888298/article/details/104209044?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control

这里我主要以第二个帖子为主进行的配置unity学习笔记-unity(2019)嵌入安卓开发-实现相互跳转_第2张图片
在as里找到setting.gradle配置文件,然后添加

include ':unityLibrary'
project(':unityLibrary').projectDir=new File('F:\\test\\unityLibrary')

这两行代码,意思是让as去找对应路径下的unity打包好的项目
然后unity学习笔记-unity(2019)嵌入安卓开发-实现相互跳转_第3张图片
在app模块的build.gradle里添加

implementation project(':unityLibrary')
    implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), include: ['*.jar'])

这两行代码,这里我的大概理解是把里面的jar add as library的方法
然后还需要
unity学习笔记-unity(2019)嵌入安卓开发-实现相互跳转_第4张图片

flatDir {
     
            dirs "${project(':unityLibrary').projectDir}/libs"
        }

这行代码,这里我感觉和前面的用处差不多,不过没有仔细研究
然后sync一下,如果找不到的话,可以unity学习笔记-unity(2019)嵌入安卓开发-实现相互跳转_第5张图片
右上角的红框,点击是一样的效果
然后就能看到unitylibrary导入在我们的as 里了
然后打开unitylibrary的androidmanifest.xml文件,吧把红框里的注释掉
不然apk在生成的时候会出现两个apk。一个是原生的,一个是unity的unity学习笔记-unity(2019)嵌入安卓开发-实现相互跳转_第6张图片
到这里as 的配置也差不多了,接下来就是添加互相跳转的方法即可

as添加跳转至unity的方法

在app的MainActivity类里添加下面的代码

unity学习笔记-unity(2019)嵌入安卓开发-实现相互跳转_第7张图片
这里的意思是给原生app界面里的button添加监听事件,当点击的时候则跳转到unity的activity里
unity学习笔记-unity(2019)嵌入安卓开发-实现相互跳转_第8张图片
上面是在as里简单添加button的流程(本人对as的使用不熟练,用的都是比较简单的~)
记住这里button 的id,我们上面跳转到unity的方法里需要用到这个button的id来找到这个button

as添加unity跳转到app的方法

unity学习笔记-unity(2019)嵌入安卓开发-实现相互跳转_第9张图片
在app模块的路径下,创建一个新的activity类,然后继承unityplayerActivity这个父类
添加下面的代码

 @Override
    protected void onCreate(Bundle savedInstanceState) {
     
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_unity);
    }
    public void ShowToast(){
     
        Intent intent = new Intent(this,MainActivity.class);
        this.startActivity(intent);
    }

需要引用的alt+enter让程序自动添加引用即可
到这里就可以进行打包调试了

调试的方法

pc上

unity学习笔记-unity(2019)嵌入安卓开发-实现相互跳转_第10张图片
unity学习笔记-unity(2019)嵌入安卓开发-实现相互跳转_第11张图片
然后ok即可

手机上

打开开发者选项(没有的在关于手机里点多几次版本号就有了)
打开usb调试,注意,这里我的手机是neo5,点击管理文件的话as是识别不了的,我是点击传输照片才行的
然后点击在这里插入图片描述
这个播放键,手机就会自动安装我们写好的程序
这里需要注意,打包好后,如果有的大佬和我一样出现了string unity学习笔记-unity(2019)嵌入安卓开发-实现相互跳转_第12张图片
类似这种问题的话,需要在unity学习笔记-unity(2019)嵌入安卓开发-实现相互跳转_第13张图片
路径下添加这个代码

<string name="game_view_content_description">Game view</string>

小的也不是很懂这个代码的含义,但能解决string出现的问题
然后测试运行即可,到这里小弟的跳转功能就实现了,就是从app跳转到unity上的时间会有点长

历经将近半年的时间,终于把这个难关打通了~其实之前已经基本实现了,就是卡在string这个bug上,一直不知道怎么解决,就搁置了,之前使用的是2018的版本,所以2018的跳转按照流程来走的话应该是没问题的,只要在string.xml文件里添加上面的代码就能解决
解决了就一个字,爽!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
加油,不能骄傲~
后期项目就要开始负责了,成长系统任务系统装备系统等等等等,还有资源热更新的问题,让一个半路出家的人来承受确实顶,希望能坚持住吧,加油~

同天晚上更新
有些细节没有处理
1,app跳转到unity的时候虽然能正常运行,但时间太长
2,当从unity跳转到app的时候,回来都是重新打开的状态,体验极差
这两个目前感觉只能从as上下手,但是本人对as的研究太浅,网上对这些的处理有的行不通, 有的是看不懂,这些问题只能等大佬或者以后自己研究研究解答了

隔天更新一下有关两个项目的包名是否需要一致的问题,这里我测试的时候用的不是一致的包名,也能够正常运行,所以应该是不用一致的
不过这可能只适用于2019版本及以上,以下的话就不清楚了~

你可能感兴趣的:(unity,java,unity,安卓)