Placeholder Image

Subtitles section Play video

  • Raycasting is the process of shooting

  • an invisible ray from a point, in a

  • specified direction to detect whether any

  • colliders lay in the path of the ray.

  • One such example of this would be

  • shooting a gun. In this instance our

  • character wants to shoot the evil box that

  • betrayed him and killed his father.

  • The syntax of the raycast function looks like this.

  • It can be confusing at first

  • but once you understand what each part does

  • it makes much more sense.

  • Firstly, the origin of the ray is a

  • point in world space.

  • So in this instance we'd choose a point in

  • front of the barrel of the gun, stored

  • as a Vector3, an X, Y and Z position.

  • However, because our world coordinates

  • direction won't be facing in the direction

  • we're shooting we will need a second Vector3

  • to store our direction in.

  • These two Vector3 variables make up

  • our ray. But we can also substitute

  • in a Ray variable, as this data type

  • can store two Vector3's.

  • Our code would then look like this.

  • The next argument in the function is a

  • RaycastHit variable that stores

  • information on the colliders hit.

  • So that it can be queried in code as to which

  • objects are intersected by the ray.

  • Finally there are two optional arguments,

  • Distance, which defines the length

  • of the ray, if omitted the ray will default

  • to an infinite length.

  • And Layer Mask. This is the number

  • of a particular layer in Unity's layer system

  • on which you can place objects if you

  • wish to make the ray ignore them.

  • Let's look at another practical example of

  • using raycasting.

  • In this example we have a parachute crate

  • that opens a parachute when it's

  • nearing the floor.

  • The crate is made up of two parts,

  • the chute and the crate itself.

  • The chute has two animations

  • one to open the chute

  • and another to close it.

  • In this example we need to cast a ray

  • downwards in order to see how far the crate is

  • from the floor, and we check for the

  • floor by looking for the environment collider.

  • Our collider for the environment is tagged

  • with the word environment.

  • And in our script we are looking for that tag.

  • The RayCast function gets placed inside

  • an IF statement so that if it returns true,

  • meaning if it intersects with anything,

  • then the comments within the IF statement

  • will be carried out and the RayCastHit

  • variable can be queried as to what has been hit.

  • So within an IF statement we've written

  • Physics.Raycast, we have a landingRay variable

  • that's storing the position of the box

  • and a downward direction. We're using

  • the shortcut Vector3.down,

  • and we're using this as the ray to cast.

  • Our RaycastHit variable - 'hit' -

  • is storing anything that gets hit by the

  • ray as it is cast downwards,

  • and the distance, or 'length' or the ray

  • is defined by our 'deployment height' variable.

  • If the ray intersects with a collider

  • then we call the deploy parachute function.

  • This function then simply sets our Boolean

  • 'deployed' flag to true so that this cannot repeat.

  • And then we set the drag of the rigid body

  • to the variable 'parachuteEffectiveness'.

  • So we slow down the crate as if it's being

  • held up by the parachute.

  • We also play the animation

  • on the parachute object,

  • which is a game object that we'll assign

  • to the public variable.

  • We then have a separate OnCollisionEnter function

  • which simply plays the closing animation.

  • So we know that as soon as it hits the ground

  • or another object the parachute can close.

  • So here we've set the length of the ray to 4

  • by setting 4 as our deployment height

  • And we're setting the drag of the rigidbody to 8

  • by setting the parachute effectiveness to 8.

  • And we've simply dragged our parachute

  • chute object on to the parachute variable.

  • Because this is the object that has an animation

  • component in order to playback

  • it's opening and closing animations.

  • So let's see that play one more time.

  • It's also worth keeping in mind

  • that although you cannot see

  • raycasts drawn in the scene view

  • or in the game. You can also use the

  • Debug.DrawRay function

  • in order to preview where a ray would be going.

  • By adding Debug.DrawRay

  • we're drawing a visual ray from

  • the position of the box in the direction

  • of Vector3.down, multiplied by

  • the deployment height - the length of our existing ray.

  • And by doing this we've matched the actual

  • ray that we're casting in the IF statement below.

  • So when we play this back you can see that

  • Unity demonstrates the ray

  • by showing us the drawn ray in the scene view.

Raycasting is the process of shooting

Subtitles and vocabulary

Click the word to look it up Click the word to find further inforamtion about it