I am making FPS, where people play against computer, i am not sure how to make time interval between enemy’s shots. Here is what I have:
var bulletSpawn: Transform;
var bullet: GameObject;
var target : Transform;
private var seeRange = 100.0;
private var shootRange= 20.0;
private var keepDistance = 10.0;
private var rotationSpeed = 5.0;
private var sightAngle = 30;
private var speed = 0.01;
private var state = “PATROL”;
private var FireTime = 0;
var firerate = 1;
function Start ()
{
Patrol ();
this.animation["shoot"].wrapMode= WrapMode.Loop;
this.animation["run"].wrapMode= WrapMode.Loop;
this.animation["idle"].wrapMode= WrapMode.Loop;
}
function Update ()
{
if (CanSeeTarget ())
{
if (CanShoot ())
{
state = "SHOOTING";
animation.CrossFade("shoot");
speed = 0.00;
Shoot ();
}
else
{
state = "PURSUE";
animation.CrossFade("run");
speed = 0.08;
Pursue();
}
}
else
{
state = "Patrol";
if (!animation.IsPlaying("idle"))
{
animation.Play ("idle");
speed = 0.00;
}
Patrol ();
}
}
function Patrol ()
{
// stand around
}
function CanSeeTarget () : boolean
{
var directionToTarget = target.position - transform.position;
var angle = Vector3.Angle (directionToTarget, this.transform.forward);
if (Vector3.Distance(transform.position, target.position) > seeRange || angle > sightAngle)
return false;
return true;
}
function CanShoot(): boolean
{
if (Vector3.Distance(transform.position, target.position) > shootRange)
return false;
return true;
}
function Pursue()
{
var position = target.position;
var direction = position - transform.position;
direction.y = 0;
transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation (direction), rotationSpeed * Time.deltaTime);
transform.eulerAngles = Vector3 (0, transform.eulerAngles.y, 0);
if (direction.magnitude > keepDistance)
{
direction = direction.normalized * speed;
transform.position += direction;
}
}
function Shoot ()
{
var position = target.position;
var direction = position - transform.position;
direction.y = 0;
transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation (direction), rotationSpeed * Time.deltaTime);
transform.eulerAngles = Vector3 (0, transform.eulerAngles.y, 0);
if (Time.time - firerate > FireTime)
{
var newbullet: GameObject = Instantiate (bullet, bulletSpawn.transform.position, transform.rotation);
Destroy (newbullet, 0.05);
}
}