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