Addressables资源如何进行完整性校验

发布时间 2023-12-19 16:04:06作者: UWATech

1)Addressables资源如何进行完整性校验
2)使用SpriteAtlas时出现冗余精灵,如何指定用哪一个图集
3)anim文件进行精度处理后某些信息丢失


这是第365篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

UWA社区主页:community.uwa4d.com
UWA QQ群:465082844

Addressable

Q:游戏是在启动的时候检测资源更新并下载,当下载到一半的时候直接退出游戏。再启动游戏的时候Addressables无法检测到要更新的资源。

我查看了下载写入资源的文件夹,发现Catalog文件已经完全写入了,估计是这个原因,导致Addressables无法检测到更新的资源。

请问,像这种下载到一半,希望Addressables能接着上次的进度继续下载的要怎么处理呢?

还有一点,不知道Addressables有没有提供资源完整性校验的方法。

我希望能在资源全部下载完成后,再检测一遍资源文件是否完整(完全下载完成以及文件是否有损坏)。并把这个检测的功能放到UI上,这样在一些不可预测的环境下,不至于卡死且无法解决问题。

A:第一个问题已经解决,Addressables自动会校验。先前我们的调用方法有问题,再加上有魔改过里面的东西导致的。

感谢题主jim@UWA问答社区提供了回答


SpriteAtlas

Q:当前2D项目中有很多场景,以下按A、B、C代替。

由于前期没有做好图片分包策略,场景之间对精灵图的引用很复杂,很多图在多个场景中都有用到。

目前采取了一个暴力的做法,对单个场景里引用的所有图片生成图集,即A场景对应A图集,B场景对应B图集。

这样虽然在图集之间有精灵冗余,但是总体包量并没有大太多。

想法是加载A场景时用A图集就够了,但在实际测试时

SpriteAtlasManager.atlasRequested(string tag, Action<SpriteAtlas> callback) {}

  

所给的Tag值可能是B图集或D图集,如果都加载的话,内存量上去了,DrawCall也降不下来。

要解决这个问题,我有几个想法:

1. 忽略Tag,A场景直接返回A图集,但如果要同时加载另外的图集就会出问题,不好。
2. 如果能找到图集内部绑定逻辑,在打包时对配置文件进行修改,就能控制Tag值了。
3. 整理资源完全去除冗余,有可能需要做可视化编辑器(如果有现成的就太好了),想想就头大。

求教一下各位大神,应该如何处理?

针对以上问题,有经验的朋友欢迎转至社区交流分享:
https://answer.uwa4d.com/question/6552e8b340a8d93b624afb93


Animation

Q:导入anim后缀的文件进行精度处理后某些信息就丢失了,如下图:

 

修改的代码:

AnimationClip theAnimation = AssetDatabase.LoadAssetAtPath<AnimationClip> (path);
Keyframe key;
Keyframe[] keyFrames;
foreach (EditorCurveBinding binding in (AnimationUtility.GetCurveBindings(theAnimation)))
{
      AnimationCurve curve = AnimationUtility.GetEditorCurve(theAnimation, binding);
      if (curve == null || curve.keys == null)
      {
            continue;
      }
      keyFrames = curve.keys;
      for (int i = 0; i < keyFrames.Length; i++)
      {
            key = keyFrames[i];
            key.value = float.Parse(key.value.ToString("f3"));
            key.inTangent = float.Parse(key.inTangent.ToString("f3"));
            key.outTangent = float.Parse(key.outTangent.ToString("f3"));
            keyFrames[i] = key;
      }
      curve.keys = keyFrames;
      theAnimation.SetCurve(binding.path, binding.type, binding.propertyName, curve);

  

修改前:
CelHeroRoleProp_enter.anim

修改后:
CelHeroRoleProp_enter.anim

A:丢失的信息是mEditorcurves,该字段只对anim在Editor中的内存占用产生影响,对其在真机运行时的动画效果与内存占用并无影响。因此该字段列表为空与否不会影响其在真机中的表现,可以用提问中的方式对其进行精度处理。如果想保留该字段(虽然对真机内存无影响),可以通过文本处理的方法对anim文件进行精度处理,处理时跳过mEdtorcurves字段。

感谢uwa_Ren@UWA问答社区提供了回答

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:465082844