I’ve recently been working on AI for my game but regardless of my efforts I can’t make it perform at the level I need it to, I need as many zombies on the screen at once as I can, but i cant get even 50 or so at once or else it lags to much to be playable I’ve tried numerous options these being:
- Character controller and raycast.
- Character controller and trigger.
- rigid body and trigger.
- rigid body and trigger.
The character controllers are moved with simple move and the rigid bodies are moved with transform.translate, but none of these run fast enough.
This is the basic code, all of the above deviations have been slightly changed versions of this:
#pragma strict
var speed : float;
var call : boolean;
public var spawnpoint : GameObject;
var head : Renderer;
var head2 : Renderer;
var blastplane : Renderer;
var health : int = 4;
private var thisTransform : Transform;
private var playerTransform : Transform;
private var player : GameObject;
private var fwd : Vector3;
private var playerfwd : Vector3;
private var thisTransformPos : Vector3;
private var controller : CharacterController;
private var ggameController : GameController;
function Start()
{
player = GameObject.FindWithTag ("Player");
thisTransform = transform;
thisTransformPos = thisTransform.position;
controller = GetComponent(CharacterController);
playerTransform = player.transform;
playerfwd = playerTransform.forward;
fwd = thisTransform.TransformDirection(Vector3.forward);
ggameController = player.GetComponent(GameController);
InvokeRepeating("main", 0, 0.1);
InvokeRepeating("move", 0, 0.01);
}
function main ()
{
var hit : RaycastHit;
if (ggameController.Chase == true)//cache this!
{
thisTransform.LookAt(playerTransform);
fwd = thisTransform.TransformDirection(Vector3.forward);
Debug.Log("SPEEEEED");
}
else if (Physics.Raycast (thisTransform.position, fwd, hit))
{
if (hit.distance < 10.1)
{
if (hit.transform == playerTransform)
{
Debug.Log ("Grrr Brains!");
//shreak here
player.GetComponent(GameController).Chase = true;;//cache this!
}
else if (hit.distance < 1.1)
{
transform.Rotate (0,transform.rotation.y + Random.Range(0,360),0);
fwd = thisTransform.TransformDirection(Vector3.forward);
}
}
}
}
function move ()
{
controller.SimpleMove(fwd * speed);
}
function Damage(dmg : int)
{
health -= dmg;
switch (health)
{
case (3):
head.material.SetTextureOffset ("_MainTex", Vector2(0.25,0));
head2.material.SetTextureOffset ("_MainTex", Vector2(0.25,0));
break;
case (2):
head.material.SetTextureOffset ("_MainTex", Vector2(0.5,0));
head2.material.SetTextureOffset ("_MainTex", Vector2(0.5,0));
break;
case (1):
head.material.SetTextureOffset ("_MainTex", Vector2(0.75,0));
head2.material.SetTextureOffset ("_MainTex", Vector2(0.75,0));
break;
case (0):
//Destroy (gameObject);
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//!!! move to start position !!!!!!!!!!!!!!!!!
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
transform.position = spawnpoint.transform.position;
health = 3;
head.material.SetTextureOffset ("_MainTex", Vector2(0,0));
head2.material.SetTextureOffset ("_MainTex", Vector2(0,0));
break;
}
}
function Blast ()
{
blastplane.enabled = true;
yield WaitForSeconds (0.25);
blastplane.enabled = false;
}
So, I was wondering how people get there AI to work so fast mine is not even complex all it does is wonder around until the player gets seen or the player shoots… Could someone give some tips and tricks to how to make nice AI or a link to a good tutorial(I’ve looked at some but they are all just like mine except don’t cache anything) So any tips or help would be great