Struct bevy_mod_raycast::immediate::Raycast
source · pub struct Raycast<'w, 's> { /* private fields */ }
Expand description
Add this raycasting [SystemParam
] to your system to raycast into the world with an
immediate-mode API. Call cast_ray
to immediately perform a raycast and get a result. Under the
hood, this is a collection of regular bevy queries, resources, and locals that are added to your
system.
Usage
The following system raycasts into the world with a ray positioned at the origin, pointing in the x-direction, and returns a list of intersections:
fn raycast_system(mut raycast: Raycast) {
let ray = Ray3d::new(Vec3::ZERO, Vec3::X);
let hits = raycast.cast_ray(ray, &RaycastSettings::default());
}
Configuration
You can specify behavior of the raycast using RaycastSettings
. This allows you to filter out
entities, configure early-out, and set whether the [Visibility
] of an entity should be
considered.
fn raycast_system(mut raycast: Raycast, foo_query: Query<With<Foo>>) {
let ray = Ray3d::new(Vec3::ZERO, Vec3::X);
// Only raycast against entities with the `Foo` component.
let filter = |entity| foo_query.contains(entity);
// Never early-exit. Note that you can change behavior per-entity.
let early_exit_test = |_entity| false;
// Ignore the visibility of entities. This allows raycasting hidden entities.
let visibility = RaycastVisibility::Ignore;
let settings = RaycastSettings::default()
.with_filter(&filter)
.with_early_exit_test(&early_exit_test)
.with_visibility(visibility);
let hits = raycast.cast_ray(ray, &settings);
}
Implementations§
source§impl<'w, 's> Raycast<'w, 's>
impl<'w, 's> Raycast<'w, 's>
sourcepub fn debug_cast_ray(
&mut self,
ray: Ray3d,
settings: &RaycastSettings<'_>,
gizmos: &mut Gizmos<'_>
) -> &[(Entity, IntersectionData)]
pub fn debug_cast_ray( &mut self, ray: Ray3d, settings: &RaycastSettings<'_>, gizmos: &mut Gizmos<'_> ) -> &[(Entity, IntersectionData)]
Like Raycast::cast_ray
, but debug-draws the ray and intersection.
sourcepub fn cast_ray(
&mut self,
ray: Ray3d,
settings: &RaycastSettings<'_>
) -> &[(Entity, IntersectionData)]
pub fn cast_ray( &mut self, ray: Ray3d, settings: &RaycastSettings<'_> ) -> &[(Entity, IntersectionData)]
Casts the ray
into the world and returns a sorted list of intersections, nearest first.
Trait Implementations§
source§impl SystemParam for Raycast<'_, '_>
impl SystemParam for Raycast<'_, '_>
§type Item<'w, 's> = Raycast<'w, 's>
type Item<'w, 's> = Raycast<'w, 's>
Self
, instantiated with new lifetimes. Read moresource§fn init_state(world: &mut World, system_meta: &mut SystemMeta) -> Self::State
fn init_state(world: &mut World, system_meta: &mut SystemMeta) -> Self::State
World
] access used by this [SystemParam
]
and creates a new instance of this param’s State
.source§fn new_archetype(
state: &mut Self::State,
archetype: &Archetype,
system_meta: &mut SystemMeta
)
fn new_archetype( state: &mut Self::State, archetype: &Archetype, system_meta: &mut SystemMeta )
Archetype
], registers the components accessed by this [SystemParam
] (if applicable).source§fn apply(state: &mut Self::State, system_meta: &SystemMeta, world: &mut World)
fn apply(state: &mut Self::State, system_meta: &SystemMeta, world: &mut World)
SystemParam
]’s state.
This is used to apply Commands
during apply_deferred
.source§unsafe fn get_param<'w, 's>(
state: &'s mut Self::State,
system_meta: &SystemMeta,
world: UnsafeWorldCell<'w>,
change_tick: Tick
) -> Self::Item<'w, 's>
unsafe fn get_param<'w, 's>( state: &'s mut Self::State, system_meta: &SystemMeta, world: UnsafeWorldCell<'w>, change_tick: Tick ) -> Self::Item<'w, 's>
SystemParamFunction
. Read moreimpl<'w, 's> ReadOnlySystemParam for Raycast<'w, 's>where
Res<'w, Assets<Mesh>>: ReadOnlySystemParam,
Local<'s, Vec<(FloatOrd, (Entity, IntersectionData))>>: ReadOnlySystemParam,
Local<'s, Vec<(Entity, IntersectionData)>>: ReadOnlySystemParam,
Local<'s, Vec<(FloatOrd, Entity)>>: ReadOnlySystemParam,
Query<'w, 's, (Read<ComputedVisibility>, Read<Aabb>, Read<GlobalTransform>, Entity), Or<(With<Handle<Mesh>>, With<Mesh2dHandle>)>>: ReadOnlySystemParam,
Query<'w, 's, (Read<Handle<Mesh>>, Option<Read<SimplifiedMesh>>, Option<Read<NoBackfaceCulling>>, Read<GlobalTransform>)>: ReadOnlySystemParam,
Query<'w, 's, (Read<Mesh2dHandle>, Option<Read<SimplifiedMesh>>, Read<GlobalTransform>)>: ReadOnlySystemParam,
Auto Trait Implementations§
impl<'w, 's> !RefUnwindSafe for Raycast<'w, 's>
impl<'w, 's> Send for Raycast<'w, 's>
impl<'w, 's> Sync for Raycast<'w, 's>
impl<'w, 's> Unpin for Raycast<'w, 's>
impl<'w, 's> !UnwindSafe for Raycast<'w, 's>
Blanket Implementations§
§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
§fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
T
[ShaderType
] for self
. When used in [AsBindGroup
]
derives, it is safe to assume that all images in self
exist.source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.