UEResManager调研分析
<table>
<thead>
<tr>
<th>修订版本</th>
<th>负责人</th>
<th>修订时间</th>
<th>概述</th>
</tr>
</thead>
<tbody>
<tr>
<td>1.0</td>
<td>李成</td>
<td>2024-09-05</td>
<td>初始版本</td>
</tr>
</tbody>
</table>
<h2>插件介绍</h2>
<p>UEResManager是一款资源管理和热更新插件,提供了UE5.4工程下,资源分包,热更新,DLC更新,新的解决方案,帮助项目更好的进行资源管理,打包和更新</p>
<h2>特点介绍:</h2>
<h3>编辑器模式:资源管理</h3>
<ol>
<li>
<p>通过加入分包文件的方式,在项目中进行资源分包,直观且方便</p>
</li>
<li>分包文件对应出包结构,并且自动设置了AssetManager,可以通过PrimaryAssetID方便进行加载,无需手动设置</li>
<li>支持自动索引分包文件所在目录的文件(文件修改,移动,重命名,增加删除,都可以自动刷新,无需更多操作(UE默认方案不支持))</li>
<li>分包文件支持树形嵌套,叶子节点的文件不会包含在父节点的包里,增加了灵活性也不用担心会重复包含(UE默认方案不支持)</li>
</ol>
<p><img src="http://www.kdocs.cn/api/v3/office/copy/S09QSkVpckFqT0NWU0swa1RYcDdScnlQUklxa3o2ZStReXlPWXRYc08zd0NyWTNONUU4MnVXL1Y3dzNHNzRZcnBURkhlaGR4djRJRTk3TXhSWVBPVGVoS2VVUXhCUjVvbmZ0N0FnM0wwaTdaMU5SbDBXUmtOTXpIRWMremhRRDFFUG5DTHpzY2lRaHNRdS9yTXdVUWwvV3FjblhBWXVPZ0w3TDUzVWdYbDhXamVjbzFtdHlkRHRuOFphQXFJWUwyM21KUTF4VHRRNk1yUmdVSjBOL3FpTzRTYS9Kbm5TeENTVTlnd1J5V3RyYjI1Z1N3SE5zY05pT2VvTzlERlR1elplTE9xWjhraVRFPQ==/attach/object/YQANAJY2ADAGY?" alt="" /></p>
<p><img src="http://www.kdocs.cn/api/v3/office/copy/S09QSkVpckFqT0NWU0swa1RYcDdScnlQUklxa3o2ZStReXlPWXRYc08zd0NyWTNONUU4MnVXL1Y3dzNHNzRZcnBURkhlaGR4djRJRTk3TXhSWVBPVGVoS2VVUXhCUjVvbmZ0N0FnM0wwaTdaMU5SbDBXUmtOTXpIRWMremhRRDFFUG5DTHpzY2lRaHNRdS9yTXdVUWwvV3FjblhBWXVPZ0w3TDUzVWdYbDhXamVjbzFtdHlkRHRuOFphQXFJWUwyM21KUTF4VHRRNk1yUmdVSjBOL3FpTzRTYS9Kbm5TeENTVTlnd1J5V3RyYjI1Z1N3SE5zY05pT2VvTzlERlR1elplTE9xWjhraVRFPQ==/attach/object/ACF5AJY2ACQCI?" alt="" /></p>
<ol>
<li>加入插件,插件初始化会自动设置打包设置,降低打包设置不统一造成的纠错成本</li>
</ol>
<p><img src="http://www.kdocs.cn/api/v3/office/copy/S09QSkVpckFqT0NWU0swa1RYcDdScnlQUklxa3o2ZStReXlPWXRYc08zd0NyWTNONUU4MnVXL1Y3dzNHNzRZcnBURkhlaGR4djRJRTk3TXhSWVBPVGVoS2VVUXhCUjVvbmZ0N0FnM0wwaTdaMU5SbDBXUmtOTXpIRWMremhRRDFFUG5DTHpzY2lRaHNRdS9yTXdVUWwvV3FjblhBWXVPZ0w3TDUzVWdYbDhXamVjbzFtdHlkRHRuOFphQXFJWUwyM21KUTF4VHRRNk1yUmdVSjBOL3FpTzRTYS9Kbm5TeENTVTlnd1J5V3RyYjI1Z1N3SE5zY05pT2VvTzlERlR1elplTE9xWjhraVRFPQ==/attach/object/X7XNIJY2ABAEK?" alt="" /></p>
<ol>
<li>
<p>支持多更新目录更新,项目可以方便的设置多个更新目录(主资源,DLC资源,等等),根据当前设置的更新区,在运行时分析阶段统一进行计算需要更新的资源</p>
</li>
<li>对任意包目录进行独立的manifest生产,也是DLC的基础</li>
<li>控制生产信息,比如内置shader可能每次打包hash值都会改变,但是其实功能无变化,是无需更新的,所以只会计算用户资源的变化,使得更新包最小化</li>
</ol>
<p><img src="http://www.kdocs.cn/api/v3/office/copy/S09QSkVpckFqT0NWU0swa1RYcDdScnlQUklxa3o2ZStReXlPWXRYc08zd0NyWTNONUU4MnVXL1Y3dzNHNzRZcnBURkhlaGR4djRJRTk3TXhSWVBPVGVoS2VVUXhCUjVvbmZ0N0FnM0wwaTdaMU5SbDBXUmtOTXpIRWMremhRRDFFUG5DTHpzY2lRaHNRdS9yTXdVUWwvV3FjblhBWXVPZ0w3TDUzVWdYbDhXamVjbzFtdHlkRHRuOFphQXFJWUwyM21KUTF4VHRRNk1yUmdVSjBOL3FpTzRTYS9Kbm5TeENTVTlnd1J5V3RyYjI1Z1N3SE5zY05pT2VvTzlERlR1elplTE9xWjhraVRFPQ==/attach/object/4TY56JY2ABAGS?" alt="" /></p>
<h3>Runtime模式:资源热更新</h3>
<ol>
<li>插件只提供热更新功能接口和信息回调,项目方可以自定义UI和逻辑,并且都支持C++和蓝图,提供了更好的灵活性</li>
<li>插件提供了热更新各个阶段的回调(获取更新信息,更新过程,更新完毕,错误提示(代办))和丰富的更新信息(更新资源集合名称,更新每份包的大小,更新过程中每个包的下载量,所需下载量,等等)</li>
</ol>
<p><img src="http://www.kdocs.cn/api/v3/office/copy/S09QSkVpckFqT0NWU0swa1RYcDdScnlQUklxa3o2ZStReXlPWXRYc08zd0NyWTNONUU4MnVXL1Y3dzNHNzRZcnBURkhlaGR4djRJRTk3TXhSWVBPVGVoS2VVUXhCUjVvbmZ0N0FnM0wwaTdaMU5SbDBXUmtOTXpIRWMremhRRDFFUG5DTHpzY2lRaHNRdS9yTXdVUWwvV3FjblhBWXVPZ0w3TDUzVWdYbDhXamVjbzFtdHlkRHRuOFphQXFJWUwyM21KUTF4VHRRNk1yUmdVSjBOL3FpTzRTYS9Kbm5TeENTVTlnd1J5V3RyYjI1Z1N3SE5zY05pT2VvTzlERlR1elplTE9xWjhraVRFPQ==/attach/object/KD7PKJY2ABQH6?" alt="" /></p>
<p><img src="http://www.kdocs.cn/api/v3/office/copy/S09QSkVpckFqT0NWU0swa1RYcDdScnlQUklxa3o2ZStReXlPWXRYc08zd0NyWTNONUU4MnVXL1Y3dzNHNzRZcnBURkhlaGR4djRJRTk3TXhSWVBPVGVoS2VVUXhCUjVvbmZ0N0FnM0wwaTdaMU5SbDBXUmtOTXpIRWMremhRRDFFUG5DTHpzY2lRaHNRdS9yTXdVUWwvV3FjblhBWXVPZ0w3TDUzVWdYbDhXamVjbzFtdHlkRHRuOFphQXFJWUwyM21KUTF4VHRRNk1yUmdVSjBOL3FpTzRTYS9Kbm5TeENTVTlnd1J5V3RyYjI1Z1N3SE5zY05pT2VvTzlERlR1elplTE9xWjhraVRFPQ==/attach/object/GWCPMJY2ABQDG?" alt="" /></p>
<ol>
<li>资源更新和逻辑分开,对于业务开发人员,资源更新是无需关心的,只用直接加载或者使用资源,编写业务逻辑</li>
<li>
<p>可以方便的设置多个更新集合包,多个包可以统一计算所需更新的内容</p>
</li>
<li>
<p>举例,客户端没有DLC的时候,只计算主包更新,当有DLC的时候,可以把DLC的资源集合包纳入计算(提供接口),这样更新会自动更新主包和DLC的更新</p>
</li>
<li>支持删除指定资源集合的更新内容(考虑到有时候包异常(极少数情况,但是量大的总会发生,比如网络下载字节出问题等等),需要重新下载更新)</li>
</ol>