This page looks best with JavaScript enabled

Detecting Objects with Raycasts in Unity3D

 ·   ·  ☕ 3 min read

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:

1
bool hitDetected = Physics.Raycast(this.transform.position, this.transform.forward);

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:

1
2
3
4
5
6
var ray = new Ray(this.transform.position, this.transform.forward);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
    objectHit = hit.transform.gameObject;
}

Raycasting Examples

Here is a collection of a few ways you could apply raycasts from my previous projects:

Raycast Alternatives

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

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

Boxcast projects a box along the ray and allow you to test if a box may move without colliding with an object.

CapsuleCast

CapsuleCast projects a capsule along a ray and can be useful for detecting things like potential player movement.

LineCast

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.

2D Raycasts

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 Physics2D.Raycast.


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


Sam Wronski
WRITTEN BY
Sam Wronski
Maker of things, currently helping build cloud things @ Google. World of Zero is a personal project disconnected from my professional work. Lets make something awesome together!