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:
```csharp
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`](docs.unity3d.com/ScriptRefere...) 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:
```csharp
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:
* [Obstacle Avoidance and Steering Algorithms]( • Experimenting with Obs... )
* [Reflecting Projectiles Off Walls]( • Projectile Reflection ... )
* [Adding Gravity and Trajectory Prediction]( • Better Projectiles wit... )
* [Projectile Penetration and Shooting Through Walls]( • Shooting Through Walls... )
* [Help Debugging Rays with Unity Gizmos]( • Using Debug.DrawLine a... )
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`](docs.unity3d.com/ScriptRefere...)
`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]( • Handling 3rd Person Ca... ) to prevent them from clipping into level geometry and ensure they behave more cleanly in tight corners.
#### [`BoxCast`](docs.unity3d.com/ScriptRefere...)
`Boxcast` projects a box along the ray and allow you to test if a box may move without colliding with an object.
#### [`CapsuleCast`](docs.unity3d.com/ScriptRefere...)
`CapsuleCast` projects a capsule along a ray and can be useful for detecting things like potential player movement.
#### [`LineCast`](docs.unity3d.com/ScriptRefere...)
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`](docs.unity3d.com/ScriptRefere....
***
The Raycasting documentation is here: docs.unity3d.com/ScriptRefere...
Join the World of Zero Discord Server: / discord
I've published additional content on my website at worldofzero.com
You may find some of the World of Zero Open Source projects at github.com/WorldOfZero
Негізгі бет Ғылым және технология Detecting Objects with Raycasts in Unity3D
Пікірлер: 64