1)多个Submeshes模型合并,显示异样
2)Addressable如何删除旧资源
3)对NGUI字体错乱的解决方案
4)GLSL link error: L0010 Uniform '_Color' differ on precision
5)iOS键盘上的输入框提醒内容如何去掉
这是第233篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。
UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)
Script
Q:测试一个Skinmesh合并性能,发现当Mesh蕴含多个Submeshes时,合并胜利后,无奈渲染显示进去。当测试的Mesh不蕴含Submeshes时,能够合并显示。难道CombineMeshes只能合并不带Submeshes的Mesh?
注:不论是应用r.sharedMesh.CombineMeshes(combineInstances.ToArray(), false, false);带上所有材质,还是r.sharedMesh.CombineMeshes(combineInstances.ToArray(), true, false) ;合并一张贴图材质,带多个Submeshes的模型只能合并无奈渲染显示进去。不带多个Submeshes的模型却可能失常合并显示。
A:测试发现,须要对每个CombineInstance从新指定三角面,能力失常显示带多个Submeshes的模型。如下代码:
foreach (SkinnedMeshRenderer smr in allSkineMeshList){ for (int sub = 0; sub < smr.sharedMesh.subMeshCount; sub++) { CombineInstance ci = new CombineInstance(); ci.mesh = smr.sharedMesh; ci.mesh.triangles = smr.sharedMesh.triangles; //这里从新指定 ci.subMeshIndex = sub; ci.transform = matrix * smr.transform.localToWorldMatrix; combineInstances.Add(ci); }
感激题主牛头人不服@UWA问答社区提供了答复
Addressable
Q:目前打算应用Addressable来实现资源热更新,理论真机测试发现当资源更新后,旧的资源Addressable并不会把它删除,同时能够看到App占用的数据文件会越来越大。请问有什么方法能够把指定的Group或Label的资源删除吗?
A:咱们用的是笼罩式更新的流程(不是增量更新),Addressables版本是1.15.1。在把Bundle Naming设置为Filename后发现,在Caching中的AssetBundle目录还是带有 Hash值的。
图中可看到AssetBundle包名曾经是Group的名字了,然而下载到Caching中还是有Hash。
而后咱们是这么解决的:还是开启文件名的Hash,将Caching中的AssetBundle文件夹名保留到PlayerPrefs中,当检测到有下载的时候,读出PlayerPrefs中的值,把旧的对应AssetBundle包删除,并更新PlayerPrefs。
获取以后Catalog中所有AssetBundle文件夹名的办法,是从Addressables中复制进去的。
// 取得以后catalog中所有 assetbundle 保留的文件夹名 // 这个函数中援用到的办法没有列出,能够去 addressables 中源码中找 // 示例:CollectBundleNames(new string[]{ "SkllIcons", "ItemIcons", "AvatarIcons" }) private static List<string> CollectBundleNames(object[] keys) { List<string> result = new List<string>();#if ENABLE_CACHING foreach(var key in keys) { IList<IResourceLocation> locations; if (key is IResourceLocation resourceLocation && resourceLocation.HasDependencies) { foreach (var dep in resourceLocation.Dependencies) { if (dep.Data is AssetBundleRequestOptions options) { result.Add(options.BundleName); } } } else if (GetResourceLocations(key, typeof(object), out locations)) { var deps = GatherDependenciesFromLocations(locations); foreach (var dep in deps) { if (dep.Data is AssetBundleRequestOptions options) { result.Add(options.BundleName); } } } }#endif return result; }
删除AssetBundle包文件夹的办法:
// 这里的 bundleName 就是 CollectBundleNames 的返回值private static void ClearCacheForBundle(string bundleName) { List<Hash128> hashList = new List<Hash128>(); Caching.GetCachedVersions(bundleName, hashList); foreach (Hash128 hash in hashList) { Caching.ClearCachedVersion(bundleName, hash); } }
须要留神的是调用CollectBundleNames的机会,如果曾经更新了Catalog,那么返回的是行将要写入Caching中的AssetBundle文件夹名。如果要失去以后AssetBundle文件夹名,要在更新Catalog之前调用。
感激jim@UWA问答社区提供了答复
Script
Q:对NGUI字体错乱有什么好的解决方案吗?
A:究其原因是NGUI的代码逻辑Bug。NGUI文字破碎
NGUI_DynamicFont_Bug_Fix
感激毛尹航@UWA问答社区提供了答复
Rendering
Q:Android真机报错,体现未发现异常,然而Bugly检测到报错日志:
相干信息:
异样过程#线程:com.go7game.jewelclassic#main(1)
用户 ID:unknown
产生工夫:2020-12-23 15:10:53
上报工夫:2020-12-23 14:11:21
利用包名:com.go7game.jewelclassic
利用版本:1.20.11
应用时长:39 秒
前后台状态:前台
设施机型:金立 M5
零碎版本:Android 6.0,level 23
ROM:LEAGOO/full_wf562k_leagoo
CPU架构:armeabi-v7a
报错的详细信息请戳原问答查看。
A:问题中有提到这个Error是金立M5上发现的,从网上材料能够查到这款手机的SoC为联发科MT6735,对应的GPU为Arm Mali-T720。Google相似问题时发现有几个相似问题会呈现在局部Mali设施。
https://github.com/cocos2d/cocos2d-x/issues/17256
https://forum.unity.com/threads/glsl-link-error-l0010-uniform-_-differ-on-precision.639451/所以猜想是因为GPU硬件或者驱动导致的浮点数精度的问题。下面帖子里也有提到一些能绕过这个Bug的计划,能够参考下。
感激范君@UWA问答社区提供了答复
iOS
Q:iOS平台,NGUI输入框中的默认内容会显示在键盘上,这栏怎么去掉,请领导一下。
A1:iOS能够批改XCode工程中的Keyboard.mm代码定制。
感激Kenji@UWA问答社区提供了答复
A2:遇到相似问题,是接入第三方SDK导致的。
感谢谢志勇@UWA问答社区提供了答复
封面图起源:GLTFUtility
https://lab.uwa4d.com/lab/5bc4223b04617c5805d4d437
明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在UWA问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官网技术QQ群:793972859(原群已满员)