- Home /
enemy AI avoiding collision
Here is my logic for enemy AI in theory:
Right now I have everything except the sending out raycasts at different angles. I can best describe it as wanting to rotate the ray with the pivot at the enemy.
var ray = new Ray(transform.position, transform.TransformDirection(Vector3.forward));
Debug.DrawLine(ray.origin, ray.origin + ray.direction * dist, Color.blue);
The above code will draw the white line from the above image, but how can I offset the directions by like 15 degrees, for example? Is there something different you would recommend?
Answer by Owen-Reynolds · Apr 04, 2012 at 03:31 AM
A raycast is "fired" through a point. In your case, you're firing it through "in front of me," which makes it go directly ahead. A really cheesy way to angle a ray is to fire it through a point off to the side. The length isn't important. In this case, 4 ahead and 1 left will hit the wall 1 unit left (whatever angle that is):
Vector3 leftSome = transform.forward*4 - transform.right*1;
... rayCast(transform.position, leftSome ..... )
Vector leftMore = transform.forward*4 - transform.right*2.5f;
// another raycast through left more
It won't give you an extra angle, but close enough (of course, 1 forward and 1 left will be 45 degrees.)
If you really want an exact angle, you can rotate transform.forward
using a Quaternion:
Vector3 left15Degs = Quaternion.Euler(0,-15,0) * transform.forward;
The first term creates a "rotation" -15 degrees around Y, and applies it to your forward.
Great thanks, this was exactly what I wanted:
Vector3 left15Degs = Quaternion.Euler(0,-15,0) * transform.forward;
Your answer
Follow this Question
Related Questions
Can I make Ai using only a focus script and a bullet script? 1 Answer
AI enemy bouncing with no collision 1 Answer
Collsions problem 0 Answers
sample of AI enemy collision 1 Answer