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次下载
1.5MB
1.5K SLoC
Bevy_adventure
用于在Bevy中构建3D冒险游戏的框架。
功能
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 Properties、Cameras和Punctual 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