Hello,
I am working on an AI. This AI has 2 states, specified by a boolean. When the boolean is false, the AI picks a random point and moves to it. When it reaches this point, it should pick another point to move to. For some reason, this doesnt work.
import System.Collections.Generic;
#pragma strict
//var players = new List.<GameObject>();
// players.Add(array[i]);
//Players
var players : GameObject[];
//Who is it
var whoEverIsIt : GameObject;
//Who to target whilst it
var closestPlayer : GameObject;
//Am I it?
var it : boolean = false;
//Point to run to
private var point : Vector3;
//Speed
var speed : float = 10.0;
//Size of movement area
var size : Vector2;
//Lights
var glow : Light;
//Can change
private var canChange : boolean = true;
function Start()
{
GeneratePoint();
}
function Update ()
{
players = GameObject.FindGameObjectsWithTag ("neutral");
whoEverIsIt = GameObject.FindGameObjectWithTag("it");
if(it)
{
GetClosestPlayer();
transform.position = Vector3.MoveTowards( transform.position, closestPlayer.transform.position, speed*Time.deltaTime );
glow.enabled = true;
gameObject.tag = "it";
} else {
transform.position = Vector3.MoveTowards( transform.position, point, speed*Time.deltaTime );
glow.enabled = false;
gameObject.tag = "neutral";
}
if(!it Vector3.Distance(transform.position, whoEverIsIt.transform.position) < 1 canChange)
{
toTrue();
} else if(it Vector3.Distance(transform.position, closestPlayer.transform.position) < 1 canChange)
{
toFalse();
}
if(Vector3.Distance(transform.position, point) < 2 || Vector3.Distance(transform.position, point) > 10)
{
GeneratePoint();
}
}
function GetClosestPlayer()
{
if(players.length > 0)
{
var closestEnemy = players[0];
var dist = Vector3.Distance(transform.position, players[0].transform.position);
for(var i=0;i<players.Length;i++)
{
var tempDist = Vector3.Distance(transform.position, players[i].transform.position);
if(tempDist < dist) {
closestEnemy = players[i];
}
}
//do something with the closestEnemy
closestPlayer = closestEnemy;
}
}
//From it to not it
function toFalse()
{
it = false;
speed = 15;
canChange = false;
yield WaitForSeconds(2);
speed = 10;
it = false;
canChange = true;
GeneratePoint();
}
//From not it to it
function toTrue()
{
it = true;
speed = 5;
canChange = false;
yield WaitForSeconds(2);
speed = 11;
it = true;
canChange = true;
}
//Generates a point to run to whilst not it
function GeneratePoint()
{
var x : float = Random.Range(0, size.x + 1);
var z : float = Random.Range(0, size.y + 1);
point = Vector3(x, 0.2, z);
}
I suspect the problem lies within these statements:
else {
transform.position = Vector3.MoveTowards( transform.position, point, speed*Time.deltaTime );
glow.enabled = false;
gameObject.tag = "neutral";
}
And
//Generates a point to run to whilst not it
function GeneratePoint()
{
var x : float = Random.Range(0, size.x + 1);
var z : float = Random.Range(0, size.y + 1);
point = Vector3(x, 0.2, z);
}
But I am not sure. Help?