这次是从 Unity2020.3.48f1c1 升级到 2022.3.8f1c1
下载2022.3.8f1c1版本要到这里找:Unity 2022.x Unity官方下载
要选择“从Hub下载”,利用Hub来安装,这样在安装的时候,就可以把对应的apk工具也装上。否则要自己手工配置apk环境,很容易出现一大堆版本兼容错误。
autostreaming错误
最典型的报错是这个:[com.unity.modules.autostreaming@1.0.0] cannot be found
我用2020随便新建个项目,什么都没做,再用2022打开,就会报这个错
看了这篇文章:
把那三个文件夹都删了,结果出现一大堆莫名其妙的错误,诸如UnityEngine.UI不存在Text或Image这种错误,让我无法继续了,只好又退回了2020。
不过Library文件夹确实可以删,后面遇到一些错乱信息时,可以删除Library再自动重建。
实测有效的解决方案:unity c1转f1报错-CSDN博客
1. 修改 Packages\manifest.json,删除autostreaming那一行即可。
2. 如果你的项目确实用到了autostreaming,那就不能删除。autostreaming应该是在PackageManager目录中的,Unity2020在Unity\2020.3.48f1c1\Editor\Data\Resources\PackageManager\BuiltInPackages里可以找到com.unity.modules.autostreaming这个文件,然后复制到2022对应的目录即可。参看:UnityEngine are you missing an assembly reference - 简书
定义宏
转换到2022后,以前定义的宏都没有了,要重新加一下,否则又是一大堆错误。
先进入安全模式,打开Project Settings->Player->Other Settings->Script Compilation->Scripting Define Symbols,把以前定义的宏都加进去。
这次unity挺给面子,再没出现什么特别的错误,可以直接进入游戏了。
安卓Android/res
接下来是安卓打包,问题又来了。先是这个:
Unity打包报错:OBSOLETE - Providing Android resources in Assets/Plugins/Android/res is deprecated...
意思是说:版本2021以后已经废弃了Android/res,要用aar方式才行。
百度了一下:修改aar方式代价有点大...发现n种方法可以不用aar解决这个问题...某人试了这n种方法还是解决不了,最后还是aar才成功。
只好又google了一下:不用aar,直接把Assets/Plugins/Android目录删了就行。我试了一下,打包apk果然成功了。可是我要用的sdk还在Android目录里呢,所以apk刚打开,就报错缺少文件卡住了。
我的情况是:Android目录中res是空的,要用的文件在libs中。因此,只把assets和res删了,对应的res.meta和assets.meta也删掉,再打包时就成功了。
安卓路径问题
以前用WWW加载的文件,有一部分路径是Assets!/assets/AssetBundles/...,一些表格数据在这里面。现在好像路径变了,导致登录完了游戏但进不去。
根据报错的路径信息,我把原来“Assets!”中的文件,挪到了\Assets\StreamingAssets\AssetBundles中,再进游戏就登录成功了。
最后一坑
本来都已成功了,我决定关闭调试信息再打一个包,也不知道是不是点错了什么东西,这次打包的apk竟然是2.6G,以前的只有1.3G。
这次我真的快要投降了,只好把Library文件夹删除并重建了一下,结果打包出来1.5G,勉强可以接受,终于松了口气。
修改之前遗留的几处bug
数组越界
有时游戏在某个操作后会卡住不动,显示以下错误:
ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
TextRenderer.UpdateMesh () (at Assets/Scripts/03Graphic/FX/HitText/TextRenderer.cs:639)
改TextRenderer.cs,在报错的函数那里直接return,不执行后面出错的代码即可。
血条没血
怪物血条只显示一个黑条的问题,要改UI的Slider结构。
CBossHpBar.cs - 有几处的mSliderBloodFg改为imgBloodFg。
调试输出:HPBarManager.cs的Logger.LogProcessFormat改为Debug.LogFormat
血条本质上是进度条,血条存放在Assets>Resources>UIFlatten>Prefabs>BattleUI>DungeonBar中,DungeonMonsterHpBar和DungeonMonsterHpBar_Green是怪物头顶的血条,HPBar_Monster、HPBar_Elite、HPBar_BOSS_NEW是屏幕上方怪物头像的。
以头顶的血条DungeonMonsterHpBar为例,打开时是这样的:
Fg是那个X号图片,应该是这张图片出错了,要先删除它。再新建一张图片,名字也改成Fg,改成红色,调整好位置大小。
在Hierachy面板选中BarRoot,在Inspector面板底下的Add Componet按钮,添加UI->Slider组件。
设置如下:
这时红色的血条的位置变了,要重新调整回刚才的位置大小。这时在Inspector拖动修改Value的值,可以看到红色的血条有长短变化。
在Hierachy面板选中BarRoot,修改这里。此时运行游戏,可以看到怪物头顶的血条已恢复正常了。
BOSS等其它血条也是类似的改法,注意结构改变了,代码也要做一点对应的改变。
背包点击问题
背包点击第一下无内容显示
Assets资源:UIFlatten/Prefabs/Package/PackageNew
打开背包界面代码:ClientSystemTownFrame->_onPackageButtonClick
ClientSystemTownFrame.cs - 主城背包按钮,先打开材料(id=2),便于切换成装备(装备页不能直接切换到装备页)
代码:frameMgr.OpenFrame<PackageNewFrame>(FrameLayer.Middle, 2);
PackageNewFrame.cs - 刚打开窗口,强制切换到装备页面