Script works for me fine but I have problem with tilting enemy (bad gravity going for tilting enemy mesh), any suggestion?
var target : Transform;
var gravity : float = 20;
var moveSpeed : float = 6; // chase speed
var rotSpeed : float = 90; // speed to turn to the player (degrees/second)
var DistanceFromPlayer;
var DistanceFromWayPoint;
var Target : Transform;
var lookAtDistance = 25.0;
var chaseRange = 15.0;
var moveSpeed = 0.1;
var controller : CharacterController;
private var rotation;
private var gravity : float = 9.8;
private var Damping = 6.0;
private var MoveDirection : Vector3 = Vector3.zero;
private var currentWayPoint : int;
public var waypoint : Transform[];
function Update ()
{
DistanceFromPlayer = Vector3.Distance(Target.position, transform.position);
rigidbody.AddForce(Vector3 (0, -gravity*rigidbody.mass, 0));
if (DistanceFromPlayer < chaseRange){
chase ();
if(DistanceFromPlayer < 3){
Debug.LogError("Dead!");
}
}
/*else if (DistanceFromPlayer < lookAtDistance){
lookAt();
}
*/
else {
patrol();
}
}
function patrol(){
if (currentWayPoint < waypoint.Length)
{
rotation = Quaternion.LookRotation(waypoint[currentWayPoint].position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Damping);
moveDirection = transform.forward;
moveDirection *= moveSpeed;
//moveDirection = moveDirection.normalized * moveSpeed;
//moveDirection.y = Mathf.Clamp(character.velocity.y, -30, 2);
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
DistanceFromWayPoint = Vector3.Distance(waypoint[currentWayPoint].position, transform.position);
if(DistanceFromWayPoint < 5){
currentWayPoint++;
if(currentWayPoint == waypoint.Length){
currentWayPoint = 0;
}
}
}
}
function lookAt ()
{
renderer.material.color = Color.yellow;
rotation = Quaternion.LookRotation(Target.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Damping);
}
function chase ()
{
lookAt();
renderer.material.color = Color.red;
moveDirection = transform.forward;
moveDirection *= moveSpeed;
//moveDirection = moveDirection.normalized * moveSpeed;
//moveDirection.y = Mathf.Clamp(character.velocity.y, -30, 2);
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
}