- Home /
Ai keeps walking in a circle.
So I'm making a simple script using Raycast where when my ai gets close to a wall it rotates and moves away from it. But when I test it the ai just runs in a circle. I'm fairly new to this and any help would be appreciated!
Here is the script I am using:
var speed : float = 10; var sightRange : float = 5; function Start () {
}function Update () {var controller = GetComponent(CharacterController);var velocity = speed;var fwd = transform.TransformDirection(Vector3.forward);var hit : RaycastHit;if(Physics.Raycast(this.transform.position,fwd,hit,sightRange));{transform.Rotate(0,90 * Time.deltaTime,0);}controller.Move(fwd * velocity * Time.deltaTime);}
Answer by Baste · Sep 12, 2014 at 03:54 PM
You've got an extra semicolon!
if(Physics.Raycast(this.transform.position,fwd,hit,sightRange)); <= THIS ONE!
{
transform.Rotate(0,90 * Time.deltaTime,0);
}
The semicolon ends the if, and the stuff between the {} happens no matter what the content of the if-check resolves to. Remove that semicolon, and you're good.
Thanks! I'll make sure I re-read everything thrice from now on!
Answer by betaFlux · Sep 12, 2014 at 04:03 PM
It looks like you need to insert another condition to make sure the ray knows when it hits a wall, otherwise it returns true if it hits anything, no matter what. Something like:
if(Physics.Raycast(this.transform.position,fwd,hit,sightRange));
{
if(hit.collider.tag == "wall") // or - if(hit.collider.gameObject.isStatic) - if you make the walls static
{
transform.Rotate(0,90 * Time.deltaTime,0);
}
}
Thanks this will be real helpful later when I start adding more objects.
Your answer
Follow this Question
Related Questions
How to return an enemy to its original location after losing aggro? 2 Answers
How do I make my AI move and follow me once I am close enough. 0 Answers
Sprite "shudders" on arrival 1 Answer
Random direction with Mouse Click... 2 Answers
Making a moving gameobject approach and stop at a target (arrival behaviour) 0 Answers