Skip to main content

Resource

Trait Resource 

Source
pub trait Resource: Component { }
Expand description

A type that can be inserted into a World as a singleton.

You can access resource data in systems using the Res and ResMut system parameters

Only one resource of each type can be stored in a World at any given time.

§Examples

#[derive(Resource)]
struct MyResource { value: u32 }

world.insert_resource(MyResource { value: 42 });

fn read_resource_system(resource: Res<MyResource>) {
    assert_eq!(resource.value, 42);
}

fn write_resource_system(mut resource: ResMut<MyResource>) {
    assert_eq!(resource.value, 42);
    resource.value = 0;
    assert_eq!(resource.value, 0);
}

§!Sync Resources

A !Sync type cannot implement Resource. However, it is possible to wrap a Send but not Sync type in SyncCell or the currently unstable Exclusive to make it Sync. This forces only having mutable access (&mut T only, never &T), but makes it safe to reference across multiple threads.

This will fail to compile since RefCell is !Sync.


#[derive(Resource)]
struct NotSync {
   counter: RefCell<usize>,
}

This will compile since the RefCell is wrapped with SyncCell.

use bevy_platform::cell::SyncCell;

#[derive(Resource)]
struct ActuallySync {
   counter: SyncCell<RefCell<usize>>,
}

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl Resource for DefaultQueryFilters
where Self: Send + Sync + 'static,

Source§

impl Resource for FallbackErrorHandler
where Self: Send + Sync + 'static,

Source§

impl Resource for MessageRegistry
where Self: Send + Sync + 'static,

Source§

impl Resource for AppTypeRegistry
where Self: Send + Sync + 'static,

Source§

impl Resource for MainThreadExecutor
where Self: Send + Sync + 'static,

Source§

impl Resource for Schedules
where Self: Send + Sync + 'static,

Source§

impl Resource for Stepping
where Self: Send + Sync + 'static,

Source§

impl Resource for RegisteredSystemDespawner
where Self: Send + Sync + 'static,

Source§

impl<M: Message> Resource for Messages<M>
where Self: Send + Sync + 'static,

Source§

impl<S> Resource for CachedSystemId<S>
where Self: Send + Sync + 'static,