i'm trying to create my own raycast AI and I want the enemy to stop following the player when something gets between them. here is my code so far; it moves by its self and it follows the player when they get into range:
var speed : float = 6;
var rotateSpeed : float = 10;
private var direction : float;
var forwardRay : float = 5;
var leftRay : float = 5;
var rightRay : float = 5;
var player : Transform;
var MaxDistance : int = 30;
var MinDistance : int = 5;
var hidden : boolean = true;
function Update () {
Patrol();
var distance : Vector3 = player.position - transform.position;
//if player is in range, enemy will follow
if(distance.magnitude < MaxDistance){
Debug.DrawLine(transform.position, player.position);
//if something is 4 units away from the enemy, the player becomes hidden
if(Physics.Raycast(transform.position, player.position, 4)){
hidden = true;
}else{
hidden = false;
}
}else{
hidden = true;
}
}
function Patrol(){
//if the player is hidden, the enemy will patrol
if(hidden){
//if there is nothing within range, then move forward
if(!Physics.Raycast(transform.position, transform.forward, forwardRay)){
transform.Translate(Vector3.forward * speed * Time.smoothDeltaTime);
}else{
//if there is something to the left, then direction = 1
if(Physics.Raycast(transform.position, -transform.right, leftRay)){
direction = 1;
//if there is something to the right, the direction = -1
}else if(Physics.Raycast(transform.position, transform.right, rightRay)){
direction = -1;
//if there is nothing to the left or right, then direction = 1
}else{
direction = 1;
}
//rotate 90 degrees in the direction (1 = right, -1 = left)
transform.Rotate(Vector3.up, 90 * rotateSpeed * direction);
}
//if the player is not hidden...
}else if(!hidden){
var distance : Vector3 = player.position - transform.position;
//move towards player
velocity = distance.normalized * speed;
rigidbody.velocity = velocity;
}
}