Raycasts provide a way for you to project lines through your scenes and detect the objects they hit as well as return important information about what they hit. This gives you a way to detect if a projectile will impact a surface, test if one player can see another, simulate a laser pointer and more.
There are two main ways of raycasting in Unity. The first behaves like a laser pointer being cast out from an origin point and stopping once it encounters a single object (or its maximum range). The other option uses the
Physics.RaycastAll and returns a set of all objects that would be impacted across the entire length of the ray.
Raycasts may be made by providing just an origin point and the direction. This returns true if any object is in the path of the ray, otherwise it results in false. For example the code to see if an object is in front of the attached Game Object might look like this:
Raycasts return a boolean representing if they hit an object or not. If you would like to learn more about what your ray hit you’ll need to take advantage of the
RaycastHit object. This provides information about the collider you impacted, the point of impact, that objects transform and more. Because of the way values are returned a typical pattern of using Raycasts looks like this:
Here is a collection of a few ways you could apply raycasts from my previous projects:
- Obstacle Avoidance and Steering Algorithms
- Reflecting Projectiles Off Walls
- Adding Gravity and Trajectory Prediction
- Projectile Penetration and Shooting Through Walls
- Help Debugging Rays with Unity Gizmos
Unity includes a set of functions that can be used in place of raycasts that use different shapes such as spheres or boxes to detect collisions. These function similarly to raycasts for the most part besides having a different shape.
SphereCast projects a sphere along a ray effectively allowing your raycast to have a radius around itself when detecting objects. This has a few uses but one of the most common is in the development of third person cameras to prevent them from clipping into level geometry and ensure they behave more cleanly in tight corners.
Boxcast projects a box along the ray and allow you to test if a box may move without colliding with an object.
CapsuleCast projects a capsule along a ray and can be useful for detecting things like potential player movement.
This functions identically to a
Raycast however instead of expecting an origin and direction and
LineCast expects two points and detects if an object is between those two points.
Variants of the 3D Raycasts and its alternatives can be used when your using Unity’s 2D Physics system. These have a different syntax and the two raycasting systems are not intercompatible.
Physics.Raycast will interact with 3D Colliders,
Physics2D.Raycast will interact with 2D Colliders. To learn more about using Raycasts in a 2D scene see the documentation for
The Raycasting documentation is here: https://docs.unity3d.com/ScriptReference/Physics.Raycast.html
Join the World of Zero Discord Server: https://discord.gg/hU5Kq2u
I’ve published additional content on my website at https://worldofzero.com
You may find some of the World of Zero Open Source projects at https://github.com/WorldOfZero