- Home /
Follow AI which avoides obstacles
Hey, so I have this AI script where if you get close to the enemy he will start chasing you. The first part which is just simply checking if you're close and chasing you works perfectly. It looks like this.
var player : Transform; // the Object the player is controlling
var spawnOrgin : Vector3; // this will be the bottom right corner of a square we will use as the spawn area
var maximum : Vector3; // max distance in the x, y, and z direction the enemy can spawn
var spawnRate : float; // how often the enemy will respawn
var distanceToPlayer : float; // how close the enemy has to be to the player to play music
var nearPlayer : boolean = false; // use this to stop the teleporting if near the player
var target : Transform; //the enemy's target
var moveSpeed = 3; //move speed
var rotationSpeed = 3; //speed of turning
var myTransform : Transform; //current transform data of this enemy
var chasing : boolean = false;
private var nextTeleport : float = 0.0f; // will keep track of when we to teleport next
function Awake()
{
myTransform = transform; //cache transform data for easy access/preformance
}
function Start ()
{
target = GameObject.FindWithTag("Player").transform; //target the player
nextTeleport = spawnRate;
}
function Update ()
{
transform.position.y=-6.357718f;
if (!nearPlayer) // only teleport if we are not close to the player
{
if (Time.time > nextTeleport) // only teleport if enough time has passed
{
transform.position = Vector3( Random.Range(spawnOrgin.x, maximum.x), Random.Range(spawnOrgin.y, maximum.y), Random.Range(spawnOrgin.z, maximum.z) ); // teleport
nextTeleport += spawnRate; // update the next time to teleport
}
}
if (Vector3.Distance(transform.position, player.position) <= distanceToPlayer)
{
if (audio && audio.clip && !audio.isPlaying && renderer.isVisible) // play the audio if it isn't playing
audio.Play();
nearPlayer = true;
chaseIsOn();
}
else
{
if (audio)
audio.Stop();
nearPlayer = false;
}
if (chasing)
{
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
//move towards the player
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
}
}
function chaseIsOn()
{
Debug.Log("THE CHASE IS ON");
chasing = true;
}
But now I'm trying to add obstacle avoidance which is not working so well. I tried adding this simple one from his video. It just doesn't work at all. It gives me errors. Is there any simple way you cans see to add obstacle avoidance into the script. If you see any please do say! thanks.
Answer by getyour411 · Sep 20, 2013 at 09:20 PM
The short answer is no, there is not a simple way. One problem is you are manipulating the objects transform property which is notorious for ignoring stuff. You can Google "A* pathfinding", "Unity NavMesh (pro)", "Unity Asset Rain" (free), etc and find Assets and Resources to help but there's no ignore_obstacles=true parameter.
Have a look at this
http://answers.unity3d.com/questions/318428/problems-with-raycast-obstacle-avoidance.html
Your answer
Follow this Question
Related Questions
Unity AI Obstacle Avoidance Help 3 Answers
How can I make an AI that avoids obstacles WITHOUT using NavMesh? 3 Answers
Raycast Steering Problem 1 Answer
Vision cone with obstacles? 2 Answers
A.I. Avoid Light 1 Answer