- Home /
AI repeats movement and isnt randomised
When I spawn in my game the player is far away from my AI. Fortunately it starts to move but all it does is move left to right and left to right and so on. This loop can only be broken when I approach it which is when it will follow me and once I move out of its attack range it makes usually a circling repeat movement. I have made the code for it to be random but it is not working. Here it is and by the way I have scrapped a lot of it which is why I have done the double dash before them but if I do need them just say.
public float enemyLookDistance;
public float attackDistance;
public float enemyMovementSpeed;
public float damping;
public Transform fpsTarget;
Rigidbody theRigidbody;
Renderer myRender;
public float AIWallDistance;
public Transform AIWall;
public Transform DeathZone;
public LayerMask whatIsWall;
public float MaxDistanceFromWall;
public Vector3 moveDir;
void Start(){
Enemy = GetComponent<NavMeshAgent> ();
myRender = GetComponent<Renderer> ();
theRigidbody = GetComponent<Rigidbody> ();
moveDir = ChooseDirection ();
transform.rotation = Quaternion.LookRotation (moveDir);
}
Vector3 ChooseDirection()
{
System.Random ran = new System.Random ();
int i = ran.Next (0, 3);
Vector3 temp = new Vector3 ();
if(i==0){
temp = transform.forward;
}
else if(i==1){
temp = -transform.forward;
}
else if(i==2){
temp = transform.right;
}
else if(i==3){
temp = -transform.right;
}
return temp;
}
void Update()
{
//theRigidbody.velocity = moveDir * enemyMovementSpeed;
//if(Physics.Raycast(transform.position, transform.forward,MaxDistanceFromWall))
//{
//moveDir = ChooseDirection ();
//transform.rotation = Quaternion.LookRotation (moveDir);
//}
}
void FixedUpdate(){
theRigidbody.AddForce (transform.forward * enemyMovementSpeed);
fpsTargetDistance = Vector3.Distance (fpsTarget.position, transform.position);
if (fpsTargetDistance < enemyLookDistance) {
myRender.material.color = Color.yellow;
LookAtPlayer ();
theRigidbody.AddForce (transform.forward * enemyMovementSpeed);
} else {
//Enemy.SetDestination (ChooseDirection());
}
if (fpsTargetDistance < attackDistance) {
attack ();
}
}
void LookAtPlayer(){
Quaternion rotation = Quaternion.LookRotation(fpsTarget.position-transform.position);
transform.rotation = Quaternion.Slerp (transform.rotation,rotation, Time.deltaTime*damping);
}
void attack(){
theRigidbody.AddForce (transform.forward * enemyMovementSpeed);
}
}
Also could you tell how to make the AI push me towards a location instead of the AI or the player jumping over each other upon collision. Thanks.
Your answer
Follow this Question
Related Questions
Racing Ai? long read 1 Answer
Random Movement Problem 1 Answer
Creating a random movement script for multiple AI drivers 2 Answers
2D Random AI 1 Answer
Random direction with Mouse Click... 2 Answers