首页 > 其他分享 >Android 集成 Unity上的坑

Android 集成 Unity上的坑

时间:2024-07-08 09:54:34浏览次数:15  
标签:集成 嵌入 Unity 报错 打包 Android 黑屏

转载自CSDN

1. Unity版本的差异
Unity的版本在2019及其以下选择Mono方式打包出Android项目,反之选择IL2CPP方式打包Android项目

为什么我会说这个Unity版本上会存在差异呢?因为我在工作时发现,我们项目原本是要升级到2022最新版的,但是发现2022用Mono方式打包出来的Android项目运行到Android设备中能启动加载页面,但是加载页面之后立马就报错,显示Failure to iniyialize!类的报错,好像是指找不到 'libmain.so ',然后我去看了文件夹里面的文件,发现Mono打包出来的Android项目文件确实没有这个;于是我又用2022版Unity采用 IL2CPP的方式再打包一个Android项目文件出来,果然,我找到了这个so库文件,对比之下发现 IL2CPP打包出来的Android项目包才有这个库文件,于是我带着好奇心去查看了一下Unity开发文档,看看官方有没有声明原因,不查不知道,一查原来是Unity官方从2020开始就已经推荐大家使用 IL2CPP 打包的方式将Unity项目嵌入到Android项目中,如果再打包是勾选 IL2CPP方式,便可以勾选上ARM64,选择Mono的话就不能勾选上ARM64了,并且打包出来没有libmain.so库,由于我对IL2CPP打包出来的文件夹的目录结构不熟悉,因为它相较于Mono打包出来的文件会多两个文件夹,我一时也不知道该如何做处理才好,再加上项目刻不容缓。我主管当时问我,我们项目选择的Unity版本选好了吗? 我当时考虑到了时间和自己对于2019.4.10f1 LTS这个版本有把握,我便选择了2019长期稳定版本的Unity 3D作为公司项目的开发,主要也是自己不敢冒险的去采用最新版本去做,避免一些不必要的麻烦和BUG。

2. Unity启动画面时间太长
正常现象,因为用的是个人开发者许可证,应选择购买专业开发者许可证才能跳过启动画面

将Unity虚拟场景嵌入到Android Studio中发现了一个问题,跳转虚拟场景后,先显示Unity Logo的加载页面,这个时间大概是2.5秒左右,但是Logo加载完成后,我惊讶的发现竟然出现了长达10秒左右的黑屏。我一开始以为是报错了,然后我开始了反复测试,发现并不是Unity端报错,也不是Android端报错,看了看日志,发现其实没有报错。于是我开始测试项目运行是否有问题,经过反复打包和测试,我发现项目没有任何问题,全部正常运行,我当时陷入了一个疑问,这个黑屏到底是什么,是Android设备卡了,出问题了吗?后来我再去看看官方文档,去百度了一下,发现其实它就是正常现象。 原因就是因为我没有花钱购买Unity的开发者许可证,因为我用的一直都是Unity学生免费版本的许可证。如果打包的是一个接近空项目Unity的场景,那么嵌入到Android是不会有这个黑屏的,因为Unity打包时,它认为你是做一个业余爱好者的身份来使用;如果你在Unity场景防止外来导入的模型和其他,那么在打包出去的时候Unity认为你将它用做专业开发,用于商业使用,将其嵌入到Android中便出现黑屏画面,当然了,除非你是购买了开发者许可证。唉,如果给用户使用的时候,我们肯定不能让用户等待Unity启动,毕竟这个启动过程有这个10秒左右的黑屏,其实也可以在这个黑屏期间放入自己公司产品的Logo来遮盖,等虚拟场景运行起来后再取消遮盖,或者也可以放入一段动画等等。

3.Unity嵌入Android的方式
嵌入方式不唯一,我的方式是将Unity导出的Android jar包和生成的Android对应文件和相应的Activity文件放入到Android项目中,然后更改添加相关配置

我看到网上其实也有很多其他的嵌入方法,但是核心都只有一个,那就导入的文件依然符合Android的目录结构,只是更加丰富了Android内容,毕竟增加了Unity引擎的虚拟场景,那这个档次一下就上来了。对了,这个不同于SDK的接入,SDK的接入只需放入jar包,将其解压在Android Studio中,再调整一下配置就接入成功了,接下来就可以按照开发文档来进行相关开发。嵌入Unity成功后,还需考虑到双端通信是否能够正常进行,这整个过程网上也没有什么可以参考的了。

4. Android与Unity如何交互
参数少的情况下:正常的函数调用即可,但每次一个参数,多调用几次即可,参数多的情况下:面对接口编程,实现双方的接口即可,具体需求具体分析。

Android调用Unity函数

UnityPlayer.UnitySendMessage("","","");
通过从UnityPlayer.UnitySendMessage(“”,“”,“”)方法来调用Unity中的脚本函数,这个UnityPlayer是jar包中所包含的一个类,可以直接调用的,这里Android来调用Unity有一个好处,那就是不用Unity反复打包操作,因为你每次修改Unity场景或者脚本后,你都得到重新打包并且重新嵌入Android,那么这一过程就会很麻烦了,所以我们尽量以Android为主,将功能都间接的交给Android端来控制,可以减少很多的调试开发过程,为项目节省很多不必要的时间。

Unity调用Android函数

AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject androidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");
实例化AndroidJavaClass对象,获取Android中com.unity3d.player.UnityPlayer,这个类在Unity3d导出工程的unity-class.jar中

实例化AndroidJavaObject对象,是Unity发送消息给Android的关键,获取到Android此刻正在运行的Activity。

标签:集成,嵌入,Unity,报错,打包,Android,黑屏
From: https://www.cnblogs.com/guangzhiruijie/p/18289335

相关文章

  • Android Studio实战演练-仿网易音乐播放器扩展
    效果图:首先按书里面一样敲出一首歌的播放也可以参考可以参考博主“林林要一直努力”写的,一首歌如下所示:林林要一直努力他写的教程链接AndroidStudio初学者实例:仿网易音乐播放器-CSDN博客https://blog.csdn.net/m0_59558544/article/details/131151435然后更改代码首先,多......
  • unity编辑器拓展,查找项目中预制体引用的组件或者脚本
    `usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEditor;usingUnityEngine.UI;usingSystem.Reflection;usingSystem;publicclassSearchComponent:EditorWindow{privatestringcomponentName="UnityEngine.......
  • 基于负相关误差函数的4集成BP神经网络matlab建模与仿真
    1.算法运行效果图预览(完整程序运行后无水印)   2.算法运行软件版本MATLAB2022a 3.部分核心程序while(Index<=Max_iteration)Indexjj=1;error2=zeros(Len,KER);while(jj<=Len)fork=1:No;d(k)=T(jj);end......
  • android中activity与fragment之间的各种跳转
    我们以音乐播放、视频播放、用户注册与登录为例【Musicfragment(音乐列表页)、Videofragment(视频列表页)、MusicAvtivity(音乐详情页)、VideoFragment(视频详情页)、LoginActivity(用户登录)、RegisterActivity(用户注册)】目录1.activity与activity之间的跳转2.activity与fragment之间......
  • 【计算机毕业设计】springboot基于Android的大学生勤工助学管理系统设计与实现
    大学生勤工助学管理系统设计的目的是为用户提供企业招聘、已投简历等方面的平台。与PC端应用程序相比,大学生勤工助学管理系统的设计主要面向于大学生勤工助学,旨在为管理员和学生、企业提供一个Android的大学生勤工助学管理系统。学生可以通过Android及时查看企业招聘等。......
  • android7.0以上调用系统相机拍照并显示到ImageView上
     /**第一步:新建文件res/xml/file_paths.xml<pathsxmlns:android="http://schemas.android.com/apk/res/android"><external-pathpath="."name="camera_photos"/></paths>*第二步:AndroidManifest.xml文件的a......
  • Unity编辑器扩展之Inspector面板扩展
    内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity编辑器扩展之Inspector面板扩展   TechX坚持将创新的科技带给世界!拥有更好的学习体验——不断努力,不断进步,不断探索TechX——心探索、心进取!助力快速掌握Inspector编辑器扩展为......
  • Android 13.0 mt6771新增分区功能实现一
    1.前言 在13.0的系统ROM定制化开发中,在对某些特殊模块中关于数据的存储方面等需要新增分区来保存,所以就需要在系统分区新增相关的分区,来实现功能,接下来就来实现这个功能,来新增分区功能2.mt6771新增分区功能实现一的核心类build/make/core/Makefilebuild/make/cor......
  • Android面试题自定义View之Window、ViewRootImpl和View的三大流程
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点View的三大流程指的是measure(测量)、layout(布局)、draw(绘制)。下面我们来分别看看这三大流程View的measure(测量)MeasureSpecMeasureSpec是View的一个内部静......
  • 基于Android Studio零食工坊
    目录项目介绍图片展示运行环境获取方式项目介绍用户可以浏览商品,查询商品,加入购物车,结算商品,查看浏览记录,修改密码,修改个人信息,查询订单管理员能够实现商品的增删查改用户的删查改订单的删查改 常用组件,共享参数,sqlite等等图片展示......