- Home /
Detect colliders in an arc
I'd like to achieve the following attack style: http://www.youtube.com/watch?v=AfEcrnhdD08
My solution is to dynamically draw a pie slice in front of my character and detect what colliders are inside, I think it's the way to go. Problem is: i don't have any idea how to do this.
Do you have any ideas?
Answer by hatuf · Jul 23, 2013 at 01:59 PM
Do a Physics.SphereCast on the character. This will get all the enemies in a circle around you. You get an array of colliders. Now loop through all those colliders and check the Dot-product between the vector from the main character to the collider and the main characters forward vector (where his face is pointing at).
The Dot-Product will be 1f if the vectors are pointing at exactly the same direction (the enemy is right in front of your face) if the enemy is right next to you on the side (90 degree angle), dot-product will be 0. If the enemy is behind you, dot-product will be -1f. To get a "pie-slice" the cut-off should be about 0.5f I'm guessing.
Pseudo code:
Vector3 vectorToCollider = (collider.transform.position - player.transform.position).Normalize();
// 180 degree arc, change 0 to 0.5 for a 90 degree "pie"
if( Vector3.Dot(vectorToCollider, player.transform.forward) ) > 0)
{
//Damage the enemy
}
That's exactly what I wanted, thanks a lot.
By the way it's Physics.SphereCastAll to get my array of colliders.
I got it to work in 15$$anonymous$$s after I was on the right trail, thanks again ;)