Hi guys i create a simple EnemyAI that enemy is in idle position, if i enter certain range he face me and if i get closer i start chase… if i get farway he return to initial position. Everything goes fine but i hv a problem when enemy in in start point, even after return of chase he keep over rotating in his Y Axes and only stop when im in range to face me… can anyone help me?
theres the script
using UnityEngine;
using System.Collections;
public class EnemyAI : MonoBehaviour
{
float distance;
float lookAtDistance = 25.0f;
float attackRange = 15.0f;
float damping = 6.0f;
public int speed;
bool isReturning;
public AnimationClip idle;
public AnimationClip run;
public Transform target;
private Vector3 initialPosition;
void Start()
{
initialPosition = transform.position;
isReturning = false;
}
void Update()
{
if (!isReturning)
{
distance = Vector3.Distance(target.position, transform.position);
if (distance < lookAtDistance)
{
animation.CrossFade (idle.name);
LookAt (target.position);
}
if(distance > lookAtDistance && distance > attackRange) //LookDistance is always bigger than the attackRange so i commented it out. //if (distance > lookAtDistance) && distance>attackRange)
{
isReturning = true;
animation.CrossFade(run.name);
}
if (distance < attackRange)
{
animation.CrossFade(run.name);
MovePlayerForward();
}
}
else
{
LookAt (initialPosition);
MovePlayerForward();
distance = Vector3.Distance(initialPosition, transform.position);
if (distance <20)
{
isReturning = false;
}
}
}
void LookAt(Vector3 targetPosition)
{
Quaternion rotation = Quaternion.LookRotation(targetPosition - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * damping);
}
void MovePlayerForward()
{
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
}
Ok after i search and change a bit my script i found that the problem is in damping parameter but i dont know wt can i change in my script to stop over rotationg inself and when near player do the same… Can anyone help plz?
Appreciate.
Sry again i tweek my script again and now the nemy only over rotate himself when he is in the spawn point out of my looat range… When i enter in lookat range he stays in normal idle animation… but when im out of that distance it keeps rotating like around is center (Y axes)
New script:
using UnityEngine;
using System.Collections;
public class EnemyAI : MonoBehaviour
{
float distance;
float lookAtDistance = 25.0f;
float chaseRange = 15.0f;
float damping = 6.0f;
float range = 1.25f;
public int speed;
bool isReturning;
public AnimationClip idle;
public AnimationClip run;
public AnimationClip attack;
public Transform target;
private Vector3 initialPosition;
public CharacterController controller;
void Start()
{
initialPosition = transform.position;
isReturning = false;
}
void Update()
{
if (!isReturning)
{
distance = Vector3.Distance(target.position, transform.position);
if (distance < lookAtDistance)
{
animation.CrossFade (idle.name);
LookAt (target.position);
}
if(distance > lookAtDistance && distance > chaseRange) //LookDistance is always bigger than the attackRange so i commented it out. //if (distance > lookAtDistance) && distance>attackRange)
{
isReturning = true;
animation.CrossFade(run.name);
}
if (distance < chaseRange)
{
transform.LookAt(target.position);
controller.SimpleMove(transform.forward*speed);
animation.CrossFade(run.name);
}
if(distance <= range)
{
animation.Play(attack.name);
}
}
else
{
LookAt (initialPosition);
MovePlayerForward();
distance = Vector3.Distance(initialPosition, transform.position);
if (distance <20)
{
isReturning = false;
}
}
}
void LookAt(Vector3 targetPosition)
{
Quaternion rotation = Quaternion.LookRotation(targetPosition - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * damping);
}
void MovePlayerForward()
{
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
}
One more thing i dont know that can help… in button of interface when normally appear the error messages i hv this in a ! white circle: Look rotation viewing vectro is zero.