I am making a FPS, but on my AI, I get a Null Reference Exception. I would like to make the script check if the tagged player exists, but I can’t figure it out. Could someone please point me in the right direction? Here is the code:
var Distance;
var Target : Transform;
var lookAtDistance = 250;
//var attackRange = 15.0;
var moveSpeed = 5.0;
var Damping = 6.0;
//Prefabs for different hits.
var FleshPrefab : Transform;
var DirtPrefab : Transform;
var MetalPrefab : Transform;
var ConcretePrefab : Transform;
var WoodPrefab : Transform;
//Bullet holes
public var woodBulletHole : GameObject[];
//End of prefabs for differen hits.
var gunshotSound : AudioClip;
private var accuracy : float = 2.5;
var TheDammage : int = 10;
var attackRepeatTime = 3.5;
var Health = 100;
private var attackTime : float;
var PlayerHealth : PlayerHealth;
//Ragdoll and AI death
var DeathRagdoll : GameObject;
var AI : Transform;
function Update ()
{
if (Target == null)
{
Target = GameObject.FindWithTag("Player").transform;
}
if (Target)
{
Distance = Vector3.Distance(Target.position, transform.position);
if (Distance < lookAtDistance)
{
renderer.material.color = Color.yellow;
lookAt();
}
if (Distance > lookAtDistance)
{
renderer.material.color = Color.green;
}
/*if (Distance < attackRange)
{
renderer.material.color = Color.red;
attack ();
}*/
}
}
function lookAt ()
{
var rotation = Quaternion.LookRotation(Target.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Damping);
attackRepeatTime = Random.Range(3.5,4.5);
accuracy = Random.Range(0.01, 12.5);
if (PlayerHealth.health >= 0)
{
Fire();
}
}
function attack ()
{
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}
function Fire()
{
if (Time.time > attackTime)
{
AudioSource.PlayClipAtPoint(gunshotSound, transform.position, 10000);
var hit : RaycastHit;
var BulletDirection = transform.TransformDirection(new Vector3(Random.Range(-accuracy, accuracy) * 0.002, Random.Range(-accuracy, accuracy) *0.001,1));
if (Physics.Raycast(transform.position, BulletDirection, hit, Mathf.Infinity))
{
if (hit.transform.gameObject.tag=="Player")
{
hit.transform.SendMessage("Damage", TheDammage, SendMessageOptions.DontRequireReceiver);
var FleshClone = Instantiate(FleshPrefab, hit.point, transform.rotation);
Destroy(FleshClone.gameObject, 2);
}
if (hit.transform.gameObject.tag=="concrete")
{
var ConcreteClone = Instantiate(ConcretePrefab, hit.point, transform.rotation);
Destroy(ConcreteClone.gameObject, 2);
}
if (hit.transform.gameObject.tag=="dirt")
{
var DirtClone = Instantiate(DirtPrefab, hit.point, transform.rotation);
Destroy(DirtClone.gameObject, 2);
}
if (hit.transform.gameObject.tag=="metal")
{
var MetalClone = Instantiate(MetalPrefab, hit.point, transform.rotation);
Destroy(MetalClone.gameObject, 2);
}
if (hit.transform.gameObject.tag=="wood")
{
var WoodClone = Instantiate(WoodPrefab, hit.point, transform.rotation);
Destroy(WoodClone.gameObject, 2);
Instantiate(woodBulletHole[Random.Range(0,3)], hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal));
}
}
attackTime = Time.time + attackRepeatTime;
}
}
function ApplyDammage (TheDammage : int)
{
Health -= TheDammage;
if(Health <= 0)
{
Dead();
}
}
function Dead()
{
Instantiate (DeathRagdoll , AI.position, transform.rotation);
Destroy (gameObject);
}