1)应用 SBP 后,如何查问 Bundle 的依赖关系
2)大量同样的怪物的骨骼动画如何优化
3)DynamicBone 动静骨骼插件是否在我的项目里应用
4)音频换 Wwise 的老本
5)运行时如何保留 Prefab
这是第 225 篇 UWA 技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫 10 分钟,认真读完必有播种。
UWA 问答社区:answer.uwa4d.com
UWA QQ 群 2:793972859(原群已满员)
AssetBundle
Q:应用 ContentPipeline.BuildAssetBundles 接口打出 Bundle 文件后,没有产生 AssetBundleManifest 文件,请问该如何查问某个 Bundle 所依赖的其余 Bundle 呢?
A:能够从 ComatibilityBuildPipeline.cs 的源码外面看到上面的代码,
用上图中的办法来生成 Manifest 对象,而后参考《应用 SBP 打 Bundle 如何读取 AssetBundleManifest》生成资源文件和打包 AssetBundle。
感激 Xuan@UWA 问答社区提供了答复
Animation
Q:大量同样的怪物的骨骼动画应该怎么优化?
1. 如果有 N 个怪物,是否同样的骨骼动画会计算 N 遍来失去每个 Mesh 的新的顶点地位。
2. 如果 1 是对的,是否计算完一个怪物在动画这一帧的顶点地位后,其余怪物都用这个计算好的后果进行渲染。
第二个问题的这个办法我认为是和 GPU Instancing 的贴图动画是有区别的。不晓得第二个办法有没有实现的可能,或者曾经有人实现了吗?
就是这一群模型体现都一样,变换矩阵每一帧都一样。请问 Shared SkinnedMesh 计划是什么思路,或者有没有参考链接?
A:请参考以下答案:
1. 不同模型的动画序列帧不同,骨骼的变换矩阵必然有差别,除非这一群模型体现都一样,能够本人写一套 Shared SkinnedMesh 的计划。如果须要在 CPU 端蒙皮把 Shader 中的蒙皮计算拿进去就好。
Shared SkinnedMesh 的计划参考:https://lab.uwa4d.com/lab/5bc6f85504617c5805d4eb0a
2.GPU Instancing 的计划也是通过将序列帧骨骼动画烘培到贴图中,而后在顶点着色器中实现蒙皮计算的过程。
具体细节可参考:《移动游戏开发核心技术解说:3D UI、GPU Skinning 和 DOTS》中 GPUSkinning 相干内容。
感激羽飞 @UWA 问答社区提供了答复
Animation
Q:DynamicBone 动静骨骼插件有人测试过性能吗?是否倡议在我的项目里应用?
A1:这插件的性能真费,我的项目里配角 30 根骨骼用上这个插件后,高端机每帧耗时 1ms。2 集体就是 2ms 了。
感激剑影蒙残 @UWA 问答社区提供了答复
A2:能够用,然而不能大面积用,最好用在重点对象上,适宜搞一些骚操作。
感激与我相干 @UWA 问答社区提供了答复
A3:齐全能够应用。
咱们上一个我的项目中有大量的舞蹈动作,最多反对 16 人的同台表演。在服装制作上应用了和 DynamicBone 相似的 Unity 日本开源的 UnityChan 中的 SpringBone。同时进行了魔改,退出了横向束缚避免在抬腿等大幅度动作时的穿模。魔改后的版本计算量比原版更大。
这类弹簧骨骼零碎的计算量次要在两方面,一方面是计算弹簧间的力传导,另一方面是计算碰撞,都是重 CPU 的计算,是非常适合放入子线程去做的。刚好能够利用 Unity 的 ECS 来进行优化。
目前网上开源的实现中,能够参考下 https://github.com/EsProgram/uSpringBone 的实现。但因为 ECS 目前还未正式 Release,所以稳定性不是特地好。
前段时间在逛 AssetStore 时,发现一个新的插件,应用 JobSystem+BurstCompiler,举荐你们去看看。
MagicaCloth
感激范君 @UWA 问答社区提供了答复
Audio
Q:咱们当初 Unity 原生的音频,应用的是一个 Resonance-Audio 插件,可能咱们本人也没用好,但能凑合着用。
据说 Wwise 不错,打算都换上。但昨天下载了一天没装置上,而且和现有音频不能一起用,不知大家是否也遇到过这样的问题,有没有什么好的思路?
大家在我的项目中途转 Wwise 的老本大吗?
A1:咱们也转了 Wwise,与原生的确不能共用。须要把现有的音频放到 Wwise 工程之后,再分平台对立导出,Wwise 导入导出以及治理还是蛮不便的。装置也是装了两三遍才装完。
Wwise Launcher 软件和 Unity Intergration 仿佛是分两次下的,集成入 Unity 工程须要等那个页面反馈一下,否则一不小心又会点到下载。
问题的确在装置,设置,打包,打热更都会有一点。
链接里是我碰到过的几个问题,尽管不是很全,能够参考看看:https://kmageek.com/2020/06/23/wwiseUnity/
感激 Maggie@UWA 问答社区提供了答复
A2:做好音频文件和我的项目工程的解耦(音频播放配表,不是通过 Prefab 关联),转过去会很不便,Wwise 通过 Bank 加载、ID 播放,做好 ID 和音频名称的映射。个别会进行二次开发,在 Editor 做个 Bank 解析、播放、关联的小标签会不便策动配置。
感激郑骁 @UWA 问答社区提供了答复
Script
Q:运行时代码克隆了一个 Prefab,而后我改了坐标或者角度,如何再保留回 Prefab?
我这个保留的数据只是举了简略的例子,理论是运行时美术会改特效特效 Particle system 外面一堆参数的。
A1:倡议应用 ScriptableObject 来实现相干性能。
不同对象的参数调整要离开思考。如果是粒子系统,编辑模式下根本都能够调了。大部分参数在编辑模式下调好,十分大量的能够在运行模式下调。调好后拷贝一下,而后退回编辑模式粘贴一下应该也能够了。
当然也能够把一些参数提出到 ScriptableObject,调这个序列化,每次运行启动的时候赋值给指标对象。如果有必要也能够做个按钮,运行时按后间接去批改 Prefab 内的值,只是这样解决起来比拟麻烦。不是很大很简单的需要还是尽量避免。
其余的一些 Prefab 内编辑器模式下不不便调的,还是倡议提出到 ScriptableObject 来解决更好。
感激黄程 @UWA 问答社区提供了答复
A2:PrefabUtility.SaveAsPrefabAssetAndConnect
感激与我相干 @UWA 问答社区提供了答复
封面图来源于网络
明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在 UWA 问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA 学堂:edu.uwa4d.com
官网技术 QQ 群:793972859(原群已满员)