How to handle multiple colliders for one enemy and bullet.


In one particular enemy has two triggers. one is to detect when player enters it to activate it’s firing and another one that detects when player bullets enter it.

Imagine it’s a turret with a proximity sensor that when you get close to it, it fires at you.

Problem is when player bullets enter the first trigger (which is obviously bigger than the 2nd one) it detects that the triggers belongs to enemy and hurts the enemy but in fact it should ignore such collisions and the 2nd trigger should be part of it’s interest.

How can I solve this?

Just check what’s triggering the collider, so make sure all your enemies have a tag Enemy for instance. Then when you call OnTriggerEnter (Collider other) call an if statement to check the tag.

if(other.tag == “Enemy”
{//Do your attack enemy code here}

If a bullet enters, as long as it isn’t tagged “Enemy” On enter will trigger but do nothing.

My advice would be to create your enemy, add two GameObject as children to your enemy and then add a collider and a custom script to each child. The custom script will have to communicate collisions/triggers to your enemy (the parent GameObject) either by having a reference to the parent, using SendMessage or a combination of child references and Events.

You can do one of two things,
1- Make the bigger trigger attached to a paren/child object of the enemy and don’t attach both triggers to the same gameObject
2- Check the distance of the bullet to enemy when it enters the trigger to see if it entered the correct one or not.

First approach is recommended for multiple reasons. First of all in manual Unity mentions that you should attach multiple collilders of an object to multiple gameObjects, maybe it’s more optimized. Also you’ll do less calculations and don’t calculate distance and you can have a trigger object which is general. For example if enemy is child of your big trigger, you can SendMessage to it, OnPlayerEnteredAOI and use it as a general AOI trigger script.