#bevy #object #scene #state #adventure #traits #create

bevy_adventure

用于在Bevy中构建冒险游戏的框架

16个不稳定版本 (6个破坏性更新)

0.6.0 2023年11月30日
0.5.0 2023年4月1日
0.4.0 2023年1月24日
0.3.0 2023年1月12日
0.0.7 2022年12月23日

#502 in 游戏开发

每月33次下载

MIT/Apache

1.5MB
1.5K SLoC

Bevy_adventure

用于在Bevy中构建3D冒险游戏的框架。

https://user-images.githubusercontent.com/29737477/212168485-6497dfdf-cfa6-406a-814b-8a6598e20152.mp4

功能

  • Interactive特质是框架的骨干,允许你创建强大的、动态的对象,这些对象可以与你的世界互动并影响其他对象或全局状态。
  • AdventureScene特质公开了一个类似Plugin的接口,用于管理GLTF场景并将组件分配给实体(基于bevy_scene_hook
  • WorldState资源,一个用于跟踪进度的字符串类型存储
  • Inventory资源允许你跟踪所持物品并创建组合它们的配方
  • 自动相机动画和状态管理,基于组件的接口
  • 支持多个场景(基于States构建)
  • 支持触发动画和音频片段

示例

examples/main.rs中有一个详细示例。包括三个场景,其中包含多个可以交互或捡起的对象。

注意

保存状态

bevy_adventure有意省略实现保存状态功能,因为不同的游戏有不同的要求。

如果你想实现这个功能,以下是你需要跟踪的内容

  • CurrentSpot资源,该资源确定场景中的当前相机位置。在保存时,保存此资源中CameraSpot的名称。在加载时,从加载的名称创建一个新的NextSpot实例,并使用Commands插入。
  • State<S>资源,该资源确定当前加载的场景
  • Inventory资源,该资源跟踪玩家持有的物品
  • WorldState资源,全局游戏状态存储

你还需要启用serde功能,以便允许这些资源的序列化和反序列化。

使用WorldState

当您构建交互式内容时,您可以在组件本身或 WorldState 中存储信息。

组件应只保留临时状态信息,例如抽屉在梳妆台上是打开的还是关闭的,或者是否已生成实体。

如果您想存储其他类型的信息,应在 WorldState 资源中完成。这样做是为了让场景中的其他交互式内容可以访问此状态(例如,您打开一个开关,灯光就会熄灭),并且您可以在一个地方存储状态信息。

创建场景

在实现 Scene 特性时,scene 方法应返回一个路径,该路径可以用 AssetServer 加载来创建 Bevy 场景。实际上,这是一个 GLTF 场景文件,但只要在加载时创建 Bevy 场景,任何其他格式都可以使用。

当与 bevy_adventure 导入时,摄像机将自动转换为 CameraSpots,点光源配置为投射阴影。

Scene 特性的 spawn 方法会对场景中的每个实体调用一次 - 您可以使用此方法为场景中的对象分配组件并初始化行为。最好的方法是匹配实体名称(从它们在场景中的名称),查看示例以了解如何进行此操作。

对于您的场景,唯一的真正要求是创建一个名为 Camera_Main 的特殊摄像机。这是您的摄像机进入场景后将定位的位置。如果没有主摄像机,应用程序将崩溃。

如果您在按名称匹配对象时遇到问题,可能是您匹配的是父对象而不是您想要匹配的实际对象。在 Scene 的 spawn 方法内添加打印语句可能有助于您确定对象是否实际被找到。

请注意,当您将场景加载到 Bevy 中时,每个对象的 'Transform Scale' 也会被加载。这可能会导致碰撞体的大小不正确 - 您应该在导出之前应用缩放。

对象的起始点也会被加载 - 如果您的对象的起始点不与对象中心对齐,这可能会导致碰撞体对齐不正确。

Blender 是创建 GLTF 场景的好选择,但您必须确保正确配置导出设置。

  • Include 下,检查 Custom PropertiesCamerasPunctual Lights
  • Transform 下,取消选中 Y+ Up

待办事项

  • 保存状态示例

许可

bevy_adventure 在 MIT 和 Apache-2.0 许可下双授权。

兼容性

注意:我们不跟踪 Bevy 主版本。

Bevy 版本 包版本
0.12 0.6
0.10 0.5
0.9 0.1, 0.2, 0.3, 0.4

依赖项

~54–92MB
~1.5M SLoC