private IEnumerator Roam() { while (!target) { if (owner == null) { yield return(null); } if (!IsOwnerTooFar()) { Unit nearestEnemy = AIUtils.GetNearestEnemy(_unit, agroRadius); if (nearestEnemy == null) { nearestEnemy = AIUtils.GetNearestEnemy(owner, agroOwnerRadius); } if (nearestEnemy != null) { Attack(nearestEnemy); yield break; } } var newPosition = owner.iso.pos + _maintainOffset; _unit.GoTo(newPosition); yield return(new WaitForSeconds(Random.Range(0.1f, 0.5f))); } }
private IEnumerator Roam() { while (!target) { Unit nearestEnemy = AIUtils.GetNearestEnemy(_unit, viewRadius); if (nearestEnemy != null) { Attack(nearestEnemy); yield break; } var newPosition = _unit.iso.pos + new Vector2(Random.Range(-8f, 8f), Random.Range(-8f, 8f)); _unit.GoTo(newPosition); yield return(new WaitForSeconds(Random.Range(1f, 2f))); } }
private IEnumerator Roam() { while (!target) { Character nearestEnemy = AIUtils.GetNearestEnemy(character, viewRadius); if (nearestEnemy != null) { Attack(nearestEnemy); yield break; } var newPosition = character.iso.pos + new Vector2(Random.Range(-8f, 8f), Random.Range(-8f, 8f)); character.GoTo(newPosition); yield return(new WaitForSeconds(Random.Range(1f, 2f))); while (!isActiveAndEnabled) { yield return(null); } } }