- Home /
Problem with Unity Ray Trace AI Detect Player
I am working on a police pursuit game. I have it working so the police car will see the player withing a radius in front of it but because I am using a collider it is detecting the player through walls and buildings. I'v tried using the stealth tutorials raycast code and can't really tell if its going to work or not but got this error:
NullReferenceException: Object reference not set to an instance of an object
PoliceVision.OnTriggerStay (UnityEngine.Collider other) (at Assets/Scripts/PoliceVision.js:27)
Am I going in the right direction? I've read a load of raycast AI questions but couldn't seem to get it working. Any help would be much appreciated!!
Here's "my" code:
var isPlayerInSightRange : boolean = false;
var playerInSight : boolean = false;
private var col : SphereCollider; // Reference to the sphere collider trigger component.
private var player : GameObject; // Reference to the player.
public var fieldOfViewAngle : float = 110f; // Number of degrees, centred on forward, for the police see.
function OnTriggerStay (other : Collider)
{
if(other.gameObject.tag == "Player")
{
isPlayerInSightRange = true;
playerInSight = false;
print ("Player is within view distance but not visible.");
var direction : Vector3 = other.transform.position - transform.position;
var angle : float = Vector3.Angle(direction, transform.forward);
// If the angle between forward and where the player is, is less than half the angle of view...
if(angle < fieldOfViewAngle * 0.5f)
{
print ("debug1");
var hit : RaycastHit;
// ... and if a raycast towards the player hits something...
if(Physics.Raycast(transform.position + transform.up, direction.normalized, hit, col.radius))
{
print ("debug2");
// ... and if the raycast hits the player...
if(hit.collider.gameObject == player)
{
print ("debug3");
// ... the player is in sight.
playerInSight = true;
// if playerInSight = true do stuff
}
}
}
}
else if (other.gameObject.tag == "checkpoint")
{
// Police car will radio out its location
}
}
function OnTriggerExit (other : Collider)
{
if(other.gameObject.tag == "Player")
{
isPlayerInSightRange = false;
print ("Player is no longer within view distance.");
}
}
I'm a noob so it probably never is but I thought on line 3?
private var col : SphereCollider;
Line 3, the member is declared, not initialized. I guess you want to use the SphereCollider attached to your gameObject ? if so :
function Awake()
{
col = GetComponent(SphereCollider);
if( col == null )
col = gameObject.AddComponent("SphereCollider");
}
Your answer
Follow this Question
Related Questions
Another Raycast Issue. 0 Answers
RayCast2D problems on collision detection 3 Answers
Raycast and ScreenPointToRay 1 Answer
Raycast Not Drawing In Target Direction? 0 Answers