开发了半年基于Unity的安卓应用,项目也基本快完结了。在开发过程中遇到了很多坑,然而Unity的技术支持几乎都在英文论坛里。直接百度,真的很难解决问题。本篇对这半年的开发经历做一个总结,希望能帮助其他开发者。

https://forum.unity.com/ 这个是Unity的官方论坛,个人认为解决技术问题很好的途径,就是回复不是很稳定,看情况,然后网络访问也不是很稳定。下面就从我在上面的提问开始写:

1. Gradle build failed

原帖地址:https://forum.unity.com/threads/gradle-build-failed.647581/#post-4910888

错误信息为:

stderr[
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring root project 'gradleOut'.
> Failed to find Build Tools revision 29.0.0

这个错误信息其实就是Unity选择了一个不存在的安卓BuildToolsVersion版本。这个问题的出现是由于两个原因:

a. 出现问题之前我PC上一直都用的Android 28,在Player settings里面目标API Level也是Android 9(28)。但是突然某天Android Studio给我下载了"29.0.0-rc1"这个测试版本的SDK(Unity使用的是Android Studio下载的SDK)。从此,Unity在Gradle Build的时候,并没有按照我设置里面的API Level 去直接选择Android 28这个版本,而是选择了29.0.0-rc1这个最新版本的BuildToolsVersion。这个可能是由于BuildToolsVersion总是选择最新的。

b. Unity即便选择了这个29.0.0-rc1 BuildToolsVersion版本,但是它写入Gradle文件的时候,却只写入了29.0.0. 所以,最终Gradle Build的时候就找不到29.0.0这个BuildToolsVersion版本。

解决方法:

1. 用Unity自己下载SDK, 在Android Studio中导入项目时选择使用项目中的SDK路径,即Unity的SDK路径。

2. 在安卓的SDK目录下删除29.0.0-rc1这个版本。

3. 用Unity导出Android Studio项目,然后在Build.gradle里把 buildToolsVersion '29.0.0'改为你想用的那个。

2. 在StreamingAssets中加载.XML文件可能会解析错误

原帖地址:https://forum.unity.com/threads/how-to-load-a-xml-file-in-android.662320/

首先,StreamingAssets里面的资源属于压缩只能读取的文件。所以要使用UnityWebRequest的方式来读取,不能直接去用C#文件流打开。否则在编辑器里模拟没问题,但是无法在设备上使用。

解析.XML文件的错误是这样的:在编辑器里面模拟加载没问题,在设备上打开也没问题,读取的字符串看起来也正常,就是反序列化的时候出现错误。

原因是由于.XML文件的BOM造成的。BOM是文件刚开始的一个标记数据,标记字节顺序的,占三个字节:“EF BB BF”。这三个字节后面的才是反序列化的内容。在安卓上读取到BOM要跳过,把BOM后面的字符串进行反序列化操作。

解决方法:

1. 生成.XML文件的时候不要带BOM;

2. 读取的时候先判断前三个字节是否为BOM,如果是就从BOM后面开始反序列化。

3. Unity2018.x升级到Unity2019.1.0.f2时的图片撕裂问题

原帖地址:https://forum.unity.com/threads/the-images-become-weird-wrong-scale-since-i-upgraded-my-project-to-2019-1-0f2.670078/

如上图中所示,左右两个Image使用的是同一个Sprite,但是显示效果完全不同。我也确认了右边的Image不存在拉伸或压缩等行为,大小和Sprite的分辨率是一样。感觉这个问题应该只是存在于升级过程中,因为升级之前完全没出现过。

解决方法:

把Image用RawImage来替换掉。

4. 触摸屏导致的点击事件异常

原帖地址:https://forum.unity.com/threads/i-have-a-tough-problem-with-screen-touch.710951/

现象:由于我们使用的是红外触摸框,不知道某种原因用户在点击的时候,Unity会同时收到两个点击事件。这个在一些资源释放操作时会产生严重的bug。这是一个很隐蔽的问题,而且由不同的代码带来的错误现象也是不同。

解决方法:

点击的时候,把函数改为不响应状态。延时一段时间(如1ms)后再恢复函数的响应。

5. 加载位于AssetBundle或者Addressables中的Video Clip的注意事项

原帖地址:https://forum.unity.com/threads/how-to-disable-caching-compressionenabled-when-caching-a-videoclip-included-addressable-bundle.740708/

首先,不论是AssetBundle还是Addressables,Video Clip所在的那个资源包都要选择未压缩。否则你大概会收到这个错误消息:

AndroidVideoMedia::OpenExtractor could not translate archive:/CAB-5b4cd0a92d354858f98b1392dd686137/CAB-5b4cd0a92d354858f98b1392dd686137.resource to local file. Make sure file exists, is on disk (not in memory) and not compressed.
AndroidVideoMedia: Error opening extractor: -10004

不用怀疑什么格式问题,就是压缩造成的问题。

另外,Addressables的机制是从Remote服务器下载AddressableAssets然后保存在本地的Cache里面,再从本地已下载的Cache文件中把VideoClip加载到程序里。所以在请求更新包含VideoClip的AddressableAssets的时候,要把Caching.compressionEnabled设置为false,即不压缩保存。

但是这会带来另一个问题:Caching.compressionEnables如果全局都设置为false,那么其他的素材占用的空间一下子也会增加几倍。目前Unity还不支持在下载Addressables的时候选择是否要压缩再Caching。

解决方法:

把VideoClip相关的Assets单独出来处理,不要和其它的放在一起。比如,统一先把Caching压缩关闭再去更新VideoClips。更新结束后再把Caching压缩打开更新别的Assets。Addressables这个系统确实省了很多事,但是目前感觉还不够成熟。

Unity3d 安卓开发问题总结相关推荐

  1. android unity hook,[原创]Unity3d安卓游戏DLL动态调式与HOOK基础

    [原创]Unity3d安卓游戏DLL动态调式与HOOK基础 2016-4-4 02:40 8207 [原创]Unity3d安卓游戏DLL动态调式与HOOK基础 2016-4-4 02:40 8207 ...

  2. Unity3D普通开发人员,主程分别需要掌握的技能

    Unity3D普通开发人员 1.会查看和搜索unity API文档,熟悉一些3D术语单词 2.查看别人的代码,能够依葫芦画瓢 3.能够制作一些常见的UI效果,善用缓动类插件,如Do Tween 4.学 ...

  3. android unity hook,Unity3d安卓游戏DLL动态调式与HOOK基础

    本帖最后由 xiaoxin520 于 2016-4-4 02:27 编辑 本文作者七少月,文章中很多观点和技术手段为本人原创,转载请注明出处,由于本人技术水平有限,不当之处,还请斧正. 前言: 由于本 ...

  4. Android安卓开发中图片缩放讲解

    安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制,一般情况下,我们 ...

  5. 如果成为一名高级安卓开发_什么是高级开发人员,我如何成为一名开发人员?

    如果成为一名高级安卓开发 Becoming a Senior Developer is something many of us strive for as we continue our code ...

  6. Android Studio安卓开发中使用json来作为网络数据传输格式

    如果你是在安卓开发中并且使用android studio,要使用json来作为数据传输的格式,那么下面是我的一些经验. 一开始我在android studio中导入那6个包,那6个包找了非常久,因为放 ...

  7. 从事安卓开发6年,我都有哪些收获?

    作者 | 拭心 来源 | 拭心又在思考了我的天(ID:evolution1024) 一转眼,我从事安卓开发工作已经六年有余,对安卓开发甚至软件开发的价值,每年都有更进一步的认识.对未来的方向,也从刚入 ...

  8. 安卓开发笔记——自定义广告轮播Banner(实现无限循环)

    关于广告轮播,大家肯定不会陌生,它在现手机市场各大APP出现的频率极高,它的优点在于"不占屏",可以仅用小小的固定空位来展示几个甚至几十个广告条,而且动态效果很好,具有很好的用户& ...

  9. 安卓开发屏幕分辨率尺寸适配问题【原创】

    2019独角兽企业重金招聘Python工程师标准>>> 屏幕分辨率尺寸适配是安卓开发中的难题之一,我开发中的解决办法是: 1.多使用相对布局,即RelativeLayout,或者Li ...

最新文章

  1. 做个md5查询站(2)初步设计
  2. 混沌模型时间序列预测
  3. spring el 三元表达式
  4. 相对位置的渐变 html,沿HTML5画布路径的连续渐变
  5. 【Matlab学习笔记】【函数学习】cat函数
  6. 【风电功率预测】基于matlab麻雀算法优化BP神经网络风电功率预测【含Matlab源码 1319期】
  7. appscan无法连接到服务器_GTA5无法连接R星服务器怎么解决?无法连接解决方法
  8. STM32 USART 多摩川编码器调试
  9. [原创工具] SangoExplorer - 《三国群英传》全系列资源浏览器
  10. vue 动态渲染表格序号列
  11. 智能存储 | 版权保护解决方案
  12. no javac in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
  13. wampServer:橙色变绿色
  14. 微信web开发者工具、网易云音乐、为知笔记等软件崩溃无法打开等问题的解决
  15. 安装多个版本号jdk后java -version不改变的问题解决
  16. pycharm跑代码时警告libpng warning: iCCP: known incorrect sRGB profile
  17. 封杀这个公式,AI智商将为零
  18. 小旋风蜘蛛池模板-免费小旋风蜘蛛池模板-免费小旋风蜘蛛池采集无需规则
  19. Ionic4--路由跳转
  20. 解决上手使用Colab、Kaggle时遇到的问题

热门文章

  1. python绘图:散点图
  2. python培训上岗
  3. 版式设计中的点线面总结
  4. Revit API 开发周边:对 Element 进行 Reflection
  5. Windows文件共享服务
  6. thinkphp5阿里云SDK短信验证
  7. EDVR: Video Restoration with Enhanced Deformable Convolutional Networks阅读笔记
  8. java计算机毕业设计五金机电市场批发零售管理信息系统源程序+mysql+系统+lw文档+远程调试
  9. 伯远帖 - Java Spring 4.0 集成 MyBatis 3.1 支持
  10. java集合之Map