A proof of concept for adding components ad-hoc within code to entities
spawned through scenes (such as gltf
files) in the [bevy game engine].
If you don't mind adding such a small dependency to your code rather than copy/pasting the code as a module, you can get it from [crates.io].
toml
[dependencies]
bevy-scene-hook = "4.0"
The following snippet of code is extracted from Warlock's Gambit source code.
It loads the scene.glb
file when the game starts. When the scene is fully loaded,
the closure passed to with_comp_hook
is ran for each entity with a Name
component
present in the scene. We add a Graveyard
component to the Entity
containing the
SceneHook
, so that it can later be checked for whether the scene completed loading.
It is possible to name object in glb
scenes in blender using the Outliner
dock (the tree view at the top right) and double-clicking object names.
See the examples in the API doc for usage.
1.1.0
: Add is_loaded
method to SceneInstance
1.2.0
: Add the world
module containing a SceneHook
trait that has
exclusive world access. Useful if you want access to assets for example.2.0.0
: Breaking: bump bevy version to 0.7
(you should be able to
upgrade from 1.2.0
without changing your code)3.0.0
: Breaking: completely rework the crate.
world
module, as the base hook method has become much more
powerful.SceneHook
to Hook
, now Hook
has a unique method to implement.HookPlugin
plugin to your app.SystemParam
: HookingSceneSpawner
.
Please use that parameter to add and remove scenes that contain hooks.
(please tell if you you accidentally spell it HonkingSceneSpawner
more
than once :duck:)when_spawned
run criteria to the is_scene_hooked
function exposed at the root of the crate, the HookedSceneState
system parameter or the SceneLoaded
component. Please use any of
those three instead of when_spawned
.3.1.0
: make run_hooks
system public so that it's possible to add it to
any stage you want in relation to any other system you want.4.0.0
: Breaking: bump bevy version to 0.8
SceneLoaded
to SceneHooked
.Hook
trait, now SceneHook::new
accepts a closure.HookingSceneSpawner
, uses HookedSceneBundle
and spawn it into an entity.| bevy | latest supporting version | |------|--------| | 0.8 | 4.0.0 | | 0.7 | 3.1.0 | | 0.6 | 1.2.0 |
This library is licensed under Apache 2.0.