1

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

 6 months ago
source link: https://blog.uwa4d.com/archives/TechSharing_365.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5fd1fb2b10a17c6c2b09d607


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后缀的文件进行精度处理后某些信息就丢失了,如下图:

1.png

修改的代码:

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问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5a4254efebf015c04f5ed54e

封面图来源于网络


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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK