大家好!我正在开发一个名为 Armita’s Search 的故事驱动的战术式盲盒卡牌游戏,它使用 Unreal Engine 进行开发。虽然项目的内容量较小,所有功能都正常工作。但是,随着我们添加了更多的纹理、动画、卡牌、UI屏幕和战斗内容,内存和优化问题开始出现。最大的问题是启动时内存使用量。
大约一个月前,我们测量到游戏在加载时可以使用约 8 GB 的 RAM (!!!)。经过优化后,我们将其降低到约 1.4 GB RAM。
我们发现的问题是:大量数据被存储在会持续整个会话的位置。主要问题是太多的资产通过 硬引用 相互连接。
我从协助我们的程序员那里了解到——我是这个项目的游戏设计师——当游戏启动时,硬引用会在链式中初始化。类 Default Objects 被创建,如果每个资产都引用其他资产,游戏就会加载太多内容。
在我们的案例中,全球数据引用了数据表,数据表引用了蓝图、卡牌、纹理、UI资产和其他内容。结果,游戏的巨大部分在主菜单启动时就已经被加载。
最有帮助的事情是:我们将许多硬引用切换为 软引用。数据结构基本保持不变,但资产不再在启动时加载。相反,它们只在真正需要时加载。
帮助了一点但仍然很重要的事情是:我们开始减少地图、战斗、UI面板和角色的大型纹理。我们还开始将纹理保存为 二进制幂大小:1024、2048 等。矩形纹理也可以,如果两边都是二进制幂,例如 1024x2048。
所以,我们的主要教训是:如果您的 Unreal Engine 项目内容在增长时,请非常小心硬引用和全球对象的使用,它们会持续整个会话。软引用可以带来巨大的差异,尤其是在启动时内存使用量方面。
评论 (0)