对于项目中的资源检查需求,需要能够实现简单且方便地配置、自动化地执行,并且能够及时地定位相关人员。基于这个需求,我开源了一个资源合规扫描工具ResScannerUE,文档:UE 资源合规检查工具 ResScannerUE
本篇文章将介绍如通过该工具,实现资源扫描的自动化,并提供了与Git结合的方式进行增量检测支持,使用Commandlet在CI平台上实现Content内容变更的自动触发并执行检测规则,并能够定位到出问题资源最近提交人,实现精确定位。

阅读全文 »

在UE中开发编辑器插件时,通过USTRUCT的反射信息自动创建属性面板是非常方便提供配置化的方式,但经常会有一些特殊的属性面板定制需求,比如提供特殊的面板选项、根据参数的不同展示不同类型的值等。UE中的属性面板在HotPatcherResScannerUE中都有应用,能够非常方便地进行插件地配置与定制化。UE的官方文档:Details Panel Customization

本篇文章从创建独立的Details面板入手,通过ResScannerUE中的具体案例,提供属性面板和属性条目的自定义的实现方法。

阅读全文 »

在UE引擎中有大量的配置使用ini来进行设置与控制。对于项目而言,了解其中哪些是能够更新的,能够对制定项目的更新内容规则有帮助。并且,UE很多功能都是通过CVars等方式实现的配置化和动态开关以及对指定平台或设备的Device Profiles设置,同样可以在热更中实现运行中配置的动态下发及应用。
本篇文章从引擎机制分析ini config的加载流程、以及不同的配置模块在热更之后重载、在项目中如何应用等内容,基于Ini配置文件的热更实现运行时引擎或项目中参数的修改、reapply,增强游戏的更新能力。

阅读全文 »

在游戏项目开发中,因为资源量大,涉及人员广,比较难自觉地统一资源规范,如果资源出现问题,手动排查要花费大量的人力,这也是资源管理的风险和痛点。
基于这种需求,我开发并开源了一款编辑器下的资源扫描规范工具ResScannerUE,可以非常方便地配置规则并实现自动化,由美术人员在资源提交前、定期执行等方式,提前检查项目中的资源是否合规,避免在打包后才发现问题。
本篇文章介绍ResScannerUE插件的使用方法、运行机制、自定义规则的扩展方式,以及后续的优化安排。

阅读全文 »

在之前的一些文章中,介绍了UE热更新丢失Shader使用默认材质的处理问题,详情可见:UE热更新:Questions & Answers#热更的资源没有效果/材质丢失

其实运行时丢失材质的根本原因是新添加或修改的资源所依赖的Shader没有被打包,运行时读取失败导致的错误。本篇文章来介绍一下Shader更新的策略和优缺点,以及对引擎内机制的分析,并提供一个结合优点的优化思路,后续准备在HotPacther中实现。

阅读全文 »

先前介绍了一系列UE中热更新工程实践的文章,能够实现基于原始工程的资源的版本比对与差异更新。但默认情况下资源的更新是基于文件的更新,某个资源产生了变动,就要将该资源的文件完整地打包进去,而UE的资源变动在Cook之后并不会造成整个文件的全部更新,序列化时只变动了某些bytes。在这种情况下,基于文件的Patch机制能够大幅度减少补丁的大小,本篇文章对二进制补丁的生成和加载方案做一个概述,以HotPatcher为基础,可以方便地实现二进制补丁的生成。
为了实现这个需求,我将HDiffPatch移植到了UE内,将其作为HotPatcher默认的二进制差异补丁的DIFF/PATCH算法,基于Modular Feature方式也可以方便地扩展其他的算法。

阅读全文 »

UE4.27推出了一项新的机制,可以把UE编译成库,能够嵌入到外部程序中,由其他的程序来驱动引擎的执行与消息通信。但是目前官方还没有放出任何有价值的文档,我分析了引擎中的相关代码,提出一个UE as Lib的实践方案,理论上也能在4.27之前的引擎版本实现,或许会与后续官方发布的文档不一致,权当抛砖引玉。相关的研究内容也会在本篇文章中持续更新。

阅读全文 »

Unreal Insight是UE自4.23之后提供的一个Profiling工具,可以非常方便地看到游戏运行的各个线程的火焰图,但是官方文档只提供了PC和Android的连接方法,并不直接支持IOS,不太方便。研究了一下发现IOS主要是网络策略的问题,本篇文章提供一个UE与IOS设备的真机Profliing以及端口互通方案,可以支持实时的Profiling以及Cook on the fly等IOS真机与PC数据互通的需求。

阅读全文 »

在大世界项目以及疫情导致的远程办公需求,开发中的协同编辑显得格外重要。在UE的资源机制中,地图是单个的资源,虽然可以使用Sub-level的形式拆分,但是最小元素仍然是单个资源,当不同的Designer修改相同的资源时,就会造成文件冲突,也没办法像文本那样合并。并且每个人负责编辑单个子关卡也没有办法实时预览整个场景的效果,在协同开发中,这是一个瓶颈。
在UE4.23之后,UE官方推出了一个多人协作机制,可以使多人共同地编辑同一份地图,并不会造成冲突,并且可以同步其他变动的资源并能够实时生效,作为版本控制的补充,能够比较完美地解决同步协作的问题。
本篇文章记录一下启用流程、使用规范以及网络策略等问题,也会提取独立的Server端程序而无需依赖完整的引擎,实现Server端的方便部署。

阅读全文 »