近期查看了博客Google Analysic的访问数据,通过流量分析发现一些很有意思的点,能够在一定程度上体现出在使用虚幻引擎进行游戏开发方面的用户特征。文章内的数据样本为本站2021.11.14-2021.11.20一周的访问流量,总体数据量有限不一定能体现出真实趋势,仅供参考。

阅读全文 »

UE5的预览宣传视频里,介绍了一种模块化开发GamePlay的机制,类似于Mod式地开发和管理游戏功能和资源,被称作“Game Feature”,在UE4.27和UE5中已经可以启用了,我觉得这个新的Gameplay Modualr形式很棒,所以做一个技术预研。

本篇文章介绍Game Feature的启用流程和运行机制介绍,文末分享了一个基于Game Feature的展示Demo。并为HotPatcher实现了能够将Feature独立打包的机制,Game Feature不必预先打包进基础包内,可以在运行中按需下载与加载,实现真正意义上的独立地模块化加载。

目前UE5 EA版本中还有不完善的地方,相关的内容也会随着引擎的更新进行补充。

阅读全文 »

通常在使用UE进行项目开发时,本地会有多个引擎版本,而Epic Game Launcher只支持安装版引擎的启动,不支持源码编译的引擎。
当本地具有多个引擎版本时,切换不方便,并且没有一种便捷地启动引擎工具、项目以及给项目添加启动参数的方式,在执行Commandlet时需要创建很多脚本,管理非常麻烦。基于这些痛点,我开发了一个UE启动器:UELauncher,用来解决这些问题,同时支持UE4和UE5。

阅读全文 »

对于项目中的资源检查需求,需要能够实现简单且方便地配置、自动化地执行,并且能够及时地定位相关人员。基于这个需求,我开源了一个资源合规扫描工具ResScannerUE,配置文档:UE 资源合规检查工具 ResScannerUE
本篇文章将介绍如何通过该工具,实现资源扫描的自动化,并提供了与Git结合的方式进行增量检测支持,使用Commandlet在CI平台上实现Content内容变更的自动触发并执行检测规则,并能够定位到出问题资源最近提交人,实现精确定位,实时发送扫描报告至企业微信,提醒通知相关人员进行处理。
另外,我还提供了基于Git的Pre-Commit Hook实现,可以在提交之前检测本次提交是否具有不合规资源,并禁止提交,避免问题资源污染远程仓库。整体方案经过了精心设计和大量体验优化、增强自动化支持,可以非常方便地配置、接入,能够实现各种资源扫描的需求。

阅读全文 »

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

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

阅读全文 »

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

阅读全文 »

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

阅读全文 »

在之前的一些文章中,介绍了UE热更新丢失Shader使用默认材质的处理问题,以及Shader Patch的方案。
详情可见文章:

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

阅读全文 »

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

阅读全文 »