Skip to main content

Resource

Trait Resource 

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.

Implementations on Foreign Types§

Source§

impl Resource for CommandScopeRegistry
where CommandScopeRegistry: Send + Sync + 'static,

Source§

impl Resource for CommandRegistry
where CommandRegistry: Send + Sync + 'static,

Source§

impl Resource for InventorySettings
where InventorySettings: Send + Sync + 'static,

Implementors§

§

impl Resource for FixedMainScheduleOrder
where FixedMainScheduleOrder: Send + Sync + 'static,

§

impl Resource for MainScheduleOrder
where MainScheduleOrder: Send + Sync + 'static,

§

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

§

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

§

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

§

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

§

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

§

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

Source§

impl Resource for EntityHitboxSettings
where EntityHitboxSettings: Send + Sync + 'static,

Source§

impl Resource for KeepaliveSettings
where KeepaliveSettings: Send + Sync + 'static,

Source§

impl Resource for MovementSettings
where MovementSettings: Send + Sync + 'static,

Source§

impl Resource for RegistryCodec
where RegistryCodec: Send + Sync + 'static,

Source§

impl Resource for TagsRegistry
where TagsRegistry: Send + Sync + 'static,

Source§

impl Resource for Server
where Server: Send + Sync + 'static,

Source§

impl Resource for ServerSettings
where ServerSettings: Send + Sync + 'static,

§

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

Source§

impl Resource for BiomeRegistry
where BiomeRegistry: Send + Sync + 'static,

Source§

impl Resource for DimensionTypeRegistry
where DimensionTypeRegistry: Send + Sync + 'static,

Source§

impl Resource for EntityManager
where EntityManager: Send + Sync + 'static,

Source§

impl Resource for NetworkSettings
where NetworkSettings: Send + Sync + 'static,

Source§

impl Resource for PlayerList
where PlayerList: Send + Sync + 'static,

§

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

Source§

impl Resource for SharedNetworkState
where SharedNetworkState: Send + Sync + 'static,

§

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

§

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