Hello,
From this post (AI optimization) which attempts to optimize AI by skipping a step via coroutine I tried to set up something similar below.
The code however makes Unity crash. Am I missing something crucial?
#pragma strict
var MoveSpeed;
var MaxDist : float;
var MinDist : float;
public var flyer : int;
var normalizedSpeed : float;
var forwardForce : float;
private var velocity: Vector3;
private var distanceToPlayer : float;
var Player : Transform;
public var character : CharacterController;
private var AI_DELAY: float = 0.5f;
function Start ()
{
yield StartCoroutine(AIMovements());
}
function Update ()
{
//yield StartCoroutine(AIMovements());
//StartCoroutine(AIMovements);
//AIMovements();
}
function AIMovements ()
{
yield WaitForSeconds(Random.value * AI_DELAY);
while(true)
{
var movement = transform.forward;
if(flyer == 1){
if(distanceToPlayer >= MinDist) {
if(distanceToPlayer <= MaxDist) {
movement *= normalizedSpeed * forwardForce;
movement += velocity;
movement *= Time.deltaTime;
character.Move( movement );
}
}
transform.LookAt(Player);
}
if(flyer == 0){
if(distanceToPlayer >= MinDist) {
if(distanceToPlayer <= MaxDist) {
movement *= normalizedSpeed * forwardForce;
movement += velocity;
movement *= Time.deltaTime;
movement.y = Player.position.y; // stay on ground
character.Move( movement);
transform.LookAt(Vector3(Player.position.x, transform.position.y, Player.position.z)); // no rotate up to lookat
}
}
}
}
}