OnCollisionEnter Vs. OnTriggerEnter — When to use them?

Raymond Mills
3 min readJul 26, 2023

We are going to discuss these two function’s uses, differences and when to use one over the other.

When it comes to handling collisions in Unity, you have two main options: OnCollisionEnter and OnTriggerEnter. But which one should you use? In this article, we’ll explore the differences between these collision detection methods and guide you on when to use each one.

Understanding OnCollisionEnter and OnTriggerEnter:

Before we compare these two collision detection methods, let’s understand what they do:

  1. OnCollisionEnter: This method is used when two objects with non-trigger collider components make contact. These will typically have a reaction between the two objects. For example, let’s imagine a game of billiards. When the cue ball hits another ball the target is propelled in a direction based on the where the contact was made as well as the velocity of the cue ball. Simulating this could be achieved by using the OnCollisionEnter function.
  2. OnTriggerEnter: This method is used when an object with a collider or a rigidbody component makes contact with another element that is using a trigger collider. This method triggers an event when an object with a collider component (typically the player) crosses the threshold of a trigger collider element. This does not have to be a physical object. For this example, let’s think of American Football. When a player carrying the ball or rather the ball itself passes the pylons marking the endzone, a touchdown is declared. So by giving the ball a collider or a rigidbody component and giving the endzone an invisible barrier between the pylons with a trigger collider, we can make it so when the ball’s collider crosses the threshold of the endzone, the player is awarded with a touchdown.

Use OnCollisionEnter when:

  1. You need to detect and respond to collisions between objects with physical properties, such as rigidbodies.
  2. You want to simulate realistic physical interactions, like bouncing, pushing, or impacting forces.
  3. The colliders involved are not trigger colliders.

Use OnTriggerEnter when:

  1. You want to detect when objects enter a specific area or trigger zone.
  2. You don’t require physical interactions or forces between colliders.
  3. You’re working with trigger colliders, which are typically used for area-based events or triggers.

Choosing the Right Method:

To decide which collision detection method to use, consider the following factors:

  1. Physical Interactions: If you need realistic physical interactions between objects, where forces are applied upon collision, use OnCollisionEnter.
  2. Trigger Events: If you want to detect when objects enter or exit a designated area without physical interactions, use OnTriggerEnter.
  3. Collider Types: If you’re working with standard colliders (non-trigger), OnCollisionEnter is the appropriate choice. If you’re dealing with trigger colliders, OnTriggerEnter is the way to go.
  4. Optimization: OnTriggerEnter tends to have better performance than OnCollisionEnter because trigger events are less computationally expensive. If you have a large number of colliders or trigger zones, consider using OnTriggerEnter for better efficiency.

Conclusion:

By now, you understand the differences between OnCollisionEnter and OnTriggerEnter in Unity. OnCollisionEnter is suitable for handling collisions between objects with rigidbodies or simulating physical interactions. OnTriggerEnter, on the other hand, is used for trigger colliders to detect when objects enter or exit specific areas without applying physical forces.

Remember to consider the type of colliders, the need for physical interactions, and the desired performance when choosing between these methods. Ultimately, the decision depends on your specific game mechanics and requirements.

So, go ahead and apply the appropriate collision detection method in your Unity projects, and may your collisions be detected with precision and finesse! Don’tt miss my next article, where I will discuss Script Communication Using GetComponent.

--

--

Raymond Mills
Raymond Mills

Written by Raymond Mills

Unity Software Engineer, I am in an apprenticeship with GameDevHQ. I am taking the steps to become a professional Unity Developer.

No responses yet