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<'_, '_>
Source§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§unsafe fn new_archetype(
state: &mut Self::State,
archetype: &Archetype,
system_meta: &mut SystemMeta,
)
unsafe fn new_archetype( state: &mut Self::State, archetype: &Archetype, system_meta: &mut SystemMeta, )
Archetype
, registers the components accessed by this SystemParam
(if applicable).a Read moreSource§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§fn queue(
state: &mut Self::State,
system_meta: &SystemMeta,
world: DeferredWorld<'_>,
)
fn queue( state: &mut Self::State, system_meta: &SystemMeta, world: DeferredWorld<'_>, )
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<InheritedVisibility>, Read<ViewVisibility>, 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> Freeze for Raycast<'w, 's>
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§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> 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
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§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
.Source§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
.Source§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.Source§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.