Addressables资源如何进行完整性校验
- 作者:admin
- /
- 时间:2023年12月12日
- /
- 浏览:1134 次
- /
- 分类:厚积薄发
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后缀的文件进行精度处理后某些信息就丢失了,如下图:
修改的代码:
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