- Home /
enemy twitches and stops following player after leaving range
i have an enemy that follows the player, but when the character is far away enough from it, it stops moving and starts twitching.
using UnityEngine;
using System.Collections;
public class ExperimentalEnemy : MonoBehaviour {
public Transform target;
public Transform Bullet;
public int moveSpeed;
public int rotationSpeed;
public float maxDistance = 50f;
public int HitBoxRadius;
public ExperimentalDeath Damage;
public GameObject MonstercatChar;
public float Health = 10f;
private Transform myTransform;
public GameObject Char;
public Animator Enemy;
public GameObject Poof;
void Awake() {
myTransform = transform;
}
// Use this for initialization
void Start () {
GameObject go = GameObject.FindGameObjectWithTag("Player");
target = go.transform;
GameObject Go2 = GameObject.FindGameObjectWithTag("Bullet");
Bullet = Go2.transform;
Char = GameObject.FindGameObjectWithTag("Player");
maxDistance = 20f;
HitBoxRadius = 4;
//Reference to DamageChar from the ExperimentalDeath.cs script
Component Damage = Char.GetComponent<ExperimentalDeath>();
}
// Update is called once per frame
void Update () {
if (Health < 0.1) {
EnemyDie ();
}
Debug.DrawLine(target.position, myTransform.position, Color.blue);
//Look at target
myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);
if(Vector3.Distance(target.position, myTransform.position) > maxDistance) {
//Move towards target
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
}
if(Vector3.Distance(target.position, myTransform.position) < HitBoxRadius) {
Damage.DamageChar(Random.Range(0.01F, 0.2F));
Debug.Log ("Is Damaging " + Char);
}
if(Vector3.Distance(Bullet.position, transform.position) < HitBoxRadius) {
EnemyDamage(Random.Range(0.01F, 0.2F));
Debug.Log ("Is Damaging Enemy By" + Bullet);
}
}
public void EnemyDamage (float amount) {
Health -= amount;
}
public void EnemyDie () {
Instantiate (Poof, transform.position, Quaternion.Euler(0f, 0f, Random.Range(0f, 360f)));
Destroy (gameObject, 5);
Enemy.SetBool ("Die", true);
}
void onTriggerEnter (Collider other){
if (other == GameObject.FindGameObjectWithTag ("Bullet")){
Destroy (other);
EnemyDamage(Random.Range(0.01F, 0.2F)) ;
Debug.Log ("Bullet In Range");
Debug.Log ("Object in Range");
}
}
}
Is the enemy far beyond 50 units away, or does this happen when the enemy is around 50 units away? The number 50 is based on your initialization code maxDistance. If you've change the value in the Inspector, substitute the Inspector value for '50' in my question.
how do i know how far 50 units is (10 in the inspector, actually update: quick question, does a collider with the "is trigger" checked still collide? because i had the same collider but without the check, and once i removed it, it didn't twitch but it won't collide with the player and then it's all weird, so i need to find a way to keep the trigger and the collision.
also, can you help me figure out what i need to remove (or add) for the enemy to only follow the player on the X and Z axes , i tried to apply rotation and location constraints. he doesn't mov dup and down but he still rotates.
Your answer
![](https://koobas.hobune.stream/wayback/20220613152754im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Need help with enemy AI 1 Answer
Follow within a certain distance? 1 Answer
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Enemy Follow Script Help 2 Answers
Help With Maze Pathfinding AI. 2 Answers