Quantcast
Channel: Questions in topic: "enemy"
Viewing all articles
Browse latest Browse all 1488

Is this the most efficient way to attack the closest enemy?

$
0
0
BLUF: Is the C# code listed below an efficient way to attack the closest enemy? Hello all, I am an experienced level designer and took the plunge into unity about five days ago. I work full time so have only had about 20 hours of messing around with scripts in unity. My experience with programming prior to this was very minimal. I could look at basic code and more or less understand what was trying to be accomplished. I am currently going to be working on dozens of small projects to understand how to accomplish core fundamentals and basic tasks that most games contain. The current one I am working on is basically this: I have a turret in the center of an open field Enemies (zombies... generic, I know) spawn at 4 points (north, south, east, and west) in 3 second intervals The enemies move at a slow speed towards the turret Once they are within range, the turret damages the closest enemy (that is within range). I left a lot of variables public so I can monitor their status in the inspector while the scene plays.. so ignore that. Please review this bit of code and tell me if there is a more efficient way to attack the closest enemy within range. It works as intended and I haven't noticed any issues with it. using UnityEngine; using System.Collections; public class Attack_Enemy : MonoBehaviour { public Vector3 playerPosition; // Default 0, 0, 0. Turret is in center of scene, value not needed. public Vector3 distanceDifference; // Difference between the target and turret. public float oldDistance = Mathf.Infinity; // Starts at infinity to always ensure IF loop runs to detect closest enemy. public float currentDistance; // The sqrMagnitude of the difference in distance public float attackSpeed; // The rate of attack of the turret public float timer; // A timer that constantly runs public int attackDamage; // The amount of damage the turret does public GameObject enemy; // Current closest enemy public GameObject closest; // Assigned as closest target public GameObject[] targets; // Array to load every target as they enter trigger public bool enemyInRange; // True/False if the enemy is within the trigger or not HealthZombie HealthZombie; // To adjust health of zombie from the HealthZombie script void OnTriggerEnter (Collider other) { if (other.gameObject.tag == "Enemy") { enemyInRange = true; targets = GameObject.FindGameObjectsWithTag ("Enemy"); foreach (GameObject target in targets) { distanceDifference = target.transform.position - playerPosition; currentDistance = distanceDifference.sqrMagnitude; if (currentDistance < oldDistance) { closest = target; enemy = closest; HealthZombie = enemy.GetComponent (); oldDistance = currentDistance; } } oldDistance = Mathf.Infinity; } } void OnTriggerExit (Collider other) { if (other.gameObject.tag == "Enemy") { enemyInRange = false; } } void Update() { timer += Time.deltaTime; if (timer >= attackSpeed && enemyInRange && HealthZombie.currentHealth > 0) { Attack (); } } void Attack () { timer = 0f; HealthZombie.TakeDamage (attackDamage); } }

Viewing all articles
Browse latest Browse all 1488

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>