using System.Collections; using System.Collections.Generic; using UnityEngine; public class Soldier : MonoBehaviour { [SerializeField] private Transform target; [SerializeField] private string enemyTag; [SerializeField] private float healthPoints = 1; [SerializeField] private float rangeAttack = 1; [SerializeField] private float rangeView = 1; [SerializeField] private float damageAttack = 1; [SerializeField] private float speedAttack = 1; // Start is called before the first frame update void Start(){ if(gameObject.tag == "Ally") enemyTag = "Enemy"; else enemyTag = "Ally"; InvokeRepeating("UpdateTarget", 0f, 0.5f); // Call UpdateTarget method at the begining of the Start() // and repeat every 0.5 second } void UpdateTarget () { // Enemies are the game objects tagged with the "Enemy" GameObject[] enemies = GameObject.FindGameObjectsWithTag(enemyTag); Debug.Log(enemies.Length); // We have not found enemy yet so the distance to enemy is "infinite" float shortestDistance = Mathf.Infinity; GameObject nearestEnemy = null; foreach ( GameObject enemy in enemies) { // Go through each enemy existing // Calculate distance to this enemy float distanceToEnemy = Vector3.Distance(transform.position, enemy.transform.position); if (distanceToEnemy < shortestDistance) { shortestDistance = distanceToEnemy; nearestEnemy = enemy; } } if (nearestEnemy != null && shortestDistance <= rangeAttack) { target = nearestEnemy.transform; } } // Update is called once per frame void Update() { if (target == null) return; } /* https://www.youtube.com/watch?v=QKhn2kl9_8I 08:54 Soldier attack void OnDrawGizmosSelected () { } */ }