#manifest #bevy #game-assets #object #loading #generation #look-up

leafwing_manifest

一个灵活的crate,用于管理具有共同结构的游戏资源。Manifests是从磁盘数据生成的,提供了一种快速查找和生成游戏对象的方法。

2个不稳定版本

0.2.0 2024年7月7日
0.1.0 2024年4月17日

385游戏开发

43 每月下载次数

MIT/Apache

54KB
444

Leafwing Manifest

leafwing_manifest 是一个简单、有偏见的工具,用于将“磁盘上的资源”转换为Bevy游戏内部灵活、健壮的对象。有四个关键概念

  1. Id: 给定类(例如怪物、瓦片类型或关卡)对象的唯一标识符。通常存储在游戏实体的组件中。
  2. Item: 给定种类游戏对象的所有共享数据(例如名称、资源句柄、统计数据)的内存表示。
  3. Manifest: 一个Bevy Resource,包含从标识符到项目的映射。
  4. 原始Manifest: Manifest中存储的数据的序列化友好表示。

数据从磁盘反序列化到原始Manifest,然后处理成包含给定类所有可用游戏对象的Manifest。然后,该Manifest用于在游戏代码中生成和查找特定种类游戏对象的属性。

Bevy兼容性

bevy 版本 leafwing_manifest 版本
0.13 0.1
0.14 0.2

为什么Manifest很酷

在内存资源中查找各种游戏对象的统计数据非常有用

  1. 在游戏代码中动态生成新游戏对象非常简单,包括在初始资源加载后很久生成对象的多个副本。只需编写一个辅助方法一次,然后使用单个命令生成任何所需的对象。
  2. 生成相同游戏对象的多个副本更安全。由于Manifest通常是只读的,因此您知道您始终可以从“干净”的版本进行克隆。
  3. Manifest提供了给定种类所有对象的清晰列表:非常适合开发工具和在游戏中的百科全书。
  4. 使用Manifest将杂乱的资源加载(和卸载)代码抽象成一个单一的一致模式,该模式可以随着您的项目增长。
  5. 在需要时,可以通过Manifest查找重用大量数据。

有关此crate为何存在以及所做设计决策的更多背景信息,请参阅MOTIVATION.md

用法

要开始

  1. 向您的应用程序中添加一个资产加载状态,该状态实现AssetState(例如我们提供的SimpleAssetState),以处理资产的加载生命周期。
  2. ManifestPlugin<S: AssetState>添加到您的App中。
  3. 创建一个结构体(例如Monster),以存储您希望在同类所有对象之间共享的最终数据。
  4. 戴上您的游戏设计帽子,并以类似于RON的序列化格式定义每个怪物的生命、等级、名称等。
  5. 使用app.register_manifest::<Monster>在您的应用程序中注册清单,提供加载数据的路径。
  6. 在您的游戏逻辑中,通过调用Manifest<Monster>.get(id: Id<Monster>)来生成怪物或查找它们的统计数据。

查看simple.rs示例,立即开始使用!

如果您的资产需要处理(用于验证,或者如果它们包含对其他资产的引用),则需要原始清单类型和相应的原始项目类型。接下来查看raw_manifest.rs示例!

注意,在我们的示例中,我们没有将清单压缩成二进制格式。虽然您可以这样做,但我们不建议您这样做(除了作为已发布游戏的优化)。版本控制和调试期间增加的痛苦通常不值得开发期间文件大小或加载速度的提高。

依赖关系

~23–58MB
~1M SLoC