编译阿拉德(四)-Unity2020升级2022

这次是从 Unity2020.3.48f1c1 升级到 2022.3.8f1c1

下载2022.3.8f1c1版本要到这里找:Unity 2022.x Unity官方下载

要选择“从Hub下载”,利用Hub来安装,这样在安装的时候,就可以把对应的apk工具也装上。否则要自己手工配置apk环境,很容易出现一大堆版本兼容错误。

autostreaming错误

最典型的报错是这个:[[email protected]] 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 - 刚打开窗口,强制切换到装备页面

猜你喜欢

转载自blog.csdn.net/icegray1/article/details/134558163