- Home /
WayPoints mixed with Raycast
I have a problem. I try to make a AI that has a rout, marked with WayPoints. But I also want it to look for the player and as soon as it is near the AI it should hunt it. But when the AI get to far a way from his next WayPoint it goes back there! this is all working fine, but now i try to get a Raycast setup working. I want the AI to hunt the Player only if he can "see" him. this is the code i am using right now. The AI is now only going his path and shows no reaction to the player. can somebody help?
var waypoint : Transform []; var speed : float = 20; private var currentWaypoint : int; var loop : boolean = true; var dist = 60; var hunt = 100; var player : Transform; var hit : RaycastHit; var see: boolean;
function Update () {
if(currentWaypoint < waypoint.length){
var target : Vector3 = waypoint[currentWaypoint].position;
var moveDirection : Vector3 = target - transform.position;
var distFromPlayer : Vector3 = player.position-transform.position;
var velocity = rigidbody.velocity;
if(moveDirection.magnitude<1){
currentWaypoint++;
}
else if(distFromPlayer.magnitude < dist && see == true){
velocity = Vector3.zero;
target = player.position;
velocity= (player.position-transform.position).normalized * speed;
if((player.position - waypoint[currentWaypoint].position).magnitude >hunt){
taget = waypoint[currentWaypoint].position;
velocity = moveDirection.normalized * speed;
}
}
else{
velocity = moveDirection.normalized * speed;
}
}
else{
if(loop){
currentWaypoint = 0;
}
else{
velocity = Vector3.zero;
}
if(Physics.Raycast(transform.position, moveDirection,hit,dist) &&hit.collider.gameObject== player.gameObject){
see = true;
}
}
rigidbody.velocity = velocity;
transform.LookAt(target);
}
Answer by efge · Feb 19, 2011 at 12:57 PM
You could attach a sphere collider to the player, set it as a trigger and use the OnTrigger - functions for detection. So you do not need any distance calculation and can easily use layers and tags.
ok, but will that work, if i only wont my ai to hunt my player if there is no object between both
You are right. Now you have to use a Raycast only when a collision with a Trigger occurs to detect visibility.