Okay so I have this code that allows this unit to target the player. It uses a ray cast script to do this. However, when I create about 5 of these units and they target the player as I’m moving around I get a null reference exception. I think this is because sometimes the ray gets blocked by another unit or something. Either way I need to figure out the root of this problem.
The error points out this code…
if (hit.collider.gameObject==targetObj && hit.collider.gameObject !== null)
here is the rest of the code…
function Update()
{
var targetObj : GameObject = targetter;
if(targetObj !== null)
{
var target : Transform = targetObj.GetComponent(Transform);
//if an enemy as further than maxDistance from you, it cannot see you
var rangeSquared = range * range;
var rayDirection : Vector3 = target.position - transform.position;
var enemyDirection : Vector3 = transform.TransformDirection(Vector3.forward);
var angleDot = Vector3.Dot(rayDirection, enemyDirection);
var playerInFrontOfEnemy = angleDot > 0.0;
var playerCloseToEnemy = rayDirection.sqrMagnitude < rangeSquared;
if (playerInFrontOfEnemy && playerCloseToEnemy)
{
inCombat = true;
//by using a Raycast you make sure an enemy does not see you
//if there is a bulduing separating you from his view, for example
//the enemy only sees you if it has you in open view
var hit : RaycastHit;
Physics.Raycast (transform.position,rayDirection, hit, range);
if (hit.collider.gameObject==targetObj && hit.collider.gameObject !== null)
{
inCombat = true;
// Look at and dampen the rotation
var rotation = Quaternion.LookRotation(target.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * damping);
//Once the unit is facing the target, this unit will fire
if(Time.time - lastFired > reloadTime && Vector3.Angle(transform.forward, target.transform.position - transform.position) < angle)
{
Fire();
lastFired = Time.time;
}
}
else
{
//enemy doesn't see you
}
}
else
{
inCombat = false;
}
}
}