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


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


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


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


Script

Q:运行时代码克隆了一个Prefab,然后我改了坐标或者角度,如何再保存回Prefab?

我这个保存的数据只是举了简单的例子,实际是运行时美术会改特效特效Particle system里面一堆参数的。

A1:建议使用ScriptableObject来实现相关功能。

不同对象的参数调整要分开考虑。如果是粒子系统,编辑模式下基本都可以调了。大部分参数在编辑模式下调好,非常少量的可以在运行模式下调。调好后拷贝一下,然后退回编辑模式粘贴一下应该也可以了。

当然也可以把一些参数提出到ScriptableObject,调这个序列化,每次运行启动的时候赋值给目标对象。如果有必要也可以做个按钮,运行时按后直接去修改Prefab内的值,只是这样处理起来比较麻烦。不是很大很复杂的需求还是尽量避免。

其他的一些Prefab内编辑器模式下不方便调的,还是建议提出到ScriptableObject来处理更好。

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

A2:PrefabUtility.SaveAsPrefabAssetAndConnect

感谢与我相关@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5f991f285d9aea5aa97198c5

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)

使用SBP后,如何查询Bundle的依赖关系相关推荐

  1. 【Linux】查询安装包|软件包依赖和被依赖关系|yum|rpm

    目录 常用命令 查询安装包 查已安装包 查询可安装包 显示安装和未安装的包 查询包依赖和被依赖 依赖哪些软件包 被哪些包依赖 常用命令 rpm -qa  软件包名,如:rpm -qa ganglia* ...

  2. 【Web技术】1176- 前端模块依赖关系分析与应用

    Meta 摘要 这篇分享主要的内容是是如何使用webpack的stats对象进行依赖和编译速度的解析,该对象包含大量的编译时信息,我们可以用它生成包含有关于模块的统计数据的 JSON 文件.这些统计数 ...

  3. makefile文件中的依赖关系理解

    首先,假设当前工程目录为prj/,该目录下有6个文件,分别是:main.c.abc.c.xyz.c.abc.h.xyz.h和Makefile.其中main.c包含头文件abc.h和xyz.h,abc. ...

  4. 查看某个软件包依赖关系

    Apt.RPM.YUM 查询依赖关系 yum deplist pack_name rpm -qpR pack_name apt-cache depends pack_name # 显示该软件包的依赖关 ...

  5. 关于数据库事务启用后的查询操作

    最近在开发中遇到一个问题,在事务启动后需要查询,一直很好奇,为什么在启动事务以后还可以查询操作.. 真的是学艺不精. 在不查询正在处理的数据的前提下,可以实现查询操作. 做一个笔记记录一下.. 转载于 ...

  6. Mybatis-Plus 使用自定义注入器后,查询条件中不再添加逻辑删除字段限定条件

    例如项目中加入如下注入器代码后,查询条件中不再添加逻辑删除字段限定条件 /*** 自定义Sql注入** @author nieqiurong 2018/8/11 20:23.*/ @Component ...

  7. EF分组后把查询的字段具体映射到指定类里面的写法

    //先做基本查询var querySql = from l in _logClinicDataOperationRepository.Tableselect new LogClinicDataOper ...

  8. @Transactional注解和Mybatis缓存问题(Mybatis 查询结果 List 对List修改后再次查询,结果与数据库不一致)

    Mybatis 查询结果 List 对List修改后再次查询,结果与数据库不一致 使用 Mybatis 查询,结果为对象的 List ,修改List内的参数后,使用相同参数再次查询,发现查询结果与数据 ...

  9. 与MS SqlServer服务器 建立连接后,查询数据时发生-指定的网络名不再可用错误-The specified network name is no longer available

    MS SqlServer 建立连接后,查询数据时发生Failed to retrieve data for this request ,报指定的网络名不再可用错误-The specified netw ...

最新文章

  1. Java一行一行的读文件和简单的写文件
  2. 深度学习算法_爱奇艺深度学习算法实习生面经
  3. 实验计算机控制器的实验结论,微机控制实验报告
  4. HTML5方式使用freeswitch——VERTO模块
  5. 同时安装python2和python3
  6. Cisco(54)——STP理论(2)
  7. 数学建模竞赛大汇总,别再被野鸡竞赛坑啦
  8. java webservice 500_Webservice调用返回错误500
  9. Insyde uefi 隐藏设置_苹果手机:插件NoMessageButtons:可隐藏iOS信息应用界面的按钮...
  10. bitset优化传递闭包
  11. 计算机属性资源管理器已停止工作,Win7资源管理器老是停止工作怎么办?资源管理器已停止工作解决方法...
  12. 零基础学习C++系列课程(二) 持续更新中
  13. 汇总并对比几个数据库存储相关的知识
  14. win10网络连接为地球禁用标志解决办法
  15. mysql如何重复数据合并_mysql合并重复数据
  16. STM32 串口 FIFO
  17. android6.0 Bluetooth蓝牙源码流程笔记
  18. 光遇服务器修复时间,光遇:测试服调整,瞬间Bug被修复?几家欢喜几家愁
  19. 2022-11-12-读书
  20. FSL安装教程(Ubuntu)

热门文章

  1. oracle redo wait较高,【案例】Oracle等待事件latch:row cache objects原因和解决办法
  2. 江海大作业(仅供参考,需要)
  3. 移动硬盘 计算机不能启动不了,移动硬盘:该设备无法启动.(代码 10)
  4. 从前端角度浅谈如何做好网站的SEO优化
  5. 你必须知道的linux开发快捷键,熟知工具快速开发
  6. 记一次折腾可移动式Ubuntu 20.04 安装在折腾折腾系列的WD p50上(即移动式挂在nvme协议下的移动固态硬盘以uefi模式启动的Ubuntu20.04 (to go))
  7. 使用matlab中PIV算法
  8. 被囊群优化算法(TSA)详解,附源码,直接可以
  9. 以太网通信时4芯网线和8芯网线的区别(百兆网络 OR 千兆网络)
  10. 什么是“月结30天”?(轉)