void Pursue() { distanceFromPlayer = Vector3.Distance(transform.position, player.transform.position); if (enemyAlerted == true) { if (distanceFromPlayer <= safeDistanceFromPlayer) { Vector3 targetDir = player.transform.position - transform.position; float relativeHeading = Vector3.Angle(transform.forward, transform.TransformVector(player.transform.forward)); float toTarget = Vector3.Angle(transform.forward, transform.TransformVector(targetDir)); if (toTarget > 90 && relativeHeading < 20 || player.GetComponent <PlayerMovement>().speed < 0.01f) { Seek(player.transform.position); return; } float lookAhead = targetDir.magnitude / (agent.speed + player.GetComponent <PlayerMovement>().speed); Seek(player.transform.position + player.transform.forward * lookAhead); } if (distanceFromPlayer > safeDistanceFromPlayer) { enemyAlerted = false; enemyState = GlobalVariables.EnemyStates.Wander; } } }
protected virtual void Start() { agent = GetComponent <NavMeshAgent>(); player = GameObject.FindWithTag("Player"); enemyState = GlobalVariables.EnemyStates.Wander; coolDown = false; enemyAlerted = false; isDead = false; enemyHealthSlider = GetComponentInChildren <Slider>(); curEnemyHealth = maxEnemyHealth; enemyHealthSlider.value = CalculatingEnemyHealth(); }
void Wander() { distanceFromPlayer = Vector3.Distance(transform.position, player.transform.position); //Debug.Log(distanceFromPlayer); if (!enemyAlerted && distanceFromPlayer >= safeDistanceFromPlayer) { wanderTarget += new Vector3(Random.Range(-1.0f, 1.0f) * wanderJitter, 0, Random.Range(-1.0f, 1.0f) * wanderJitter); wanderTarget.Normalize(); wanderTarget *= wanderRadius; Vector3 targetLocal = wanderTarget + new Vector3(0, 0, wanderDistance); Vector3 targetWorld = gameObject.transform.InverseTransformVector(targetLocal); targetWorld = Random.insideUnitSphere * wanderRadius; Seek(targetWorld); } else { enemyAlerted = true; enemyState = GlobalVariables.EnemyStates.Pursue; } }