- Home /
 
How do I make it so that I can attack more than 1 enemy?
I got a boxing kit and I'm trying to get it so that my player can attack more than one enemy. I've tried but I can't do it. Can someone please help me?!? This is the script that allows the player to harm the enemy.
 #pragma strict
 
 /*
 
 This script controlls the player combat.
 
 */
 
 // Damage for each attack type
 var damageJab : float;
 var damageCross : float;
 var damageUpperLeft : float;
 var damageUpperRight : float;
 
 var attackRatio : float; // If you increment this, the player can hit more faster.
 
 // Audio Vars
 var attackMissed : AudioClip;
 var attackLeft : AudioClip;
 var attackRight : AudioClip;
 
 var enemy : GameObject;
 
 // Some private vars.
 private var timeForNextAttack : float;
 private var canAct : boolean = true;
 private var isDead : boolean = false;
 private var damageCaused : float;
 private var playerStatusScript : playerStatus;
 private var levelManagerScript : LevelManager;
 
 function Start(){
     playerStatusScript = transform.GetComponent(playerStatus);
     levelManagerScript = GameObject.FindGameObjectWithTag("LevelManager").GetComponent(LevelManager);
     enemy = GameObject.FindGameObjectWithTag("Enemy");
 }
 
 function Update () {
 
     if(!isDead){
 
         if(timeForNextAttack > 0){
             timeForNextAttack -= Time.deltaTime;
             canAct = false;
         }
         if(timeForNextAttack < 0){
             timeForNextAttack = 0;
             canAct = true;
         }
     
         if(Input.GetKeyDown(KeyCode.R) && canAct){
             gameObject.SendMessage("Attack","jab");
         }
         if(Input.GetKeyDown(KeyCode.T) && canAct){
             gameObject.SendMessage("Attack","cross");
         }
         if(Input.GetKeyDown(KeyCode.F) && canAct){
             gameObject.SendMessage("Attack","uppercutleft");
         }
         if(Input.GetKeyDown(KeyCode.G) && canAct){
             gameObject.SendMessage("Attack","uppercutright");
         }
         
         if(Input.GetKey(KeyCode.E)){
             gameObject.SendMessage("Covered");
         }
         else{
             gameObject.SendMessage("Uncovered");
         }
     }
 }
 
 function Attack (attackType : String) {
 
     timeForNextAttack = attackRatio;
     playerStatusScript.LoseStamina(5);
     
     if(enemy){
         var dist = Vector3.Distance(transform.position, enemy.transform.position);
     }
     
     if(attackType == "jab"){
         if(dist < 1.95){
             damageCaused = playerStatusScript.stamina * damageJab / 100;
             enemy.SendMessage("LoseLife",damageCaused);
             enemy.SendMessage("Impact",attackType);
             playerStatusScript.LoseStamina(2);
             audio.PlayOneShot(attackLeft);
         }else{
             audio.PlayOneShot(attackMissed);
         }
     }
     if(attackType == "cross"){
         if(dist < 1.95){
             damageCaused = playerStatusScript.stamina * damageCross / 100;
             enemy.SendMessage("LoseLife",damageCaused);
             enemy.SendMessage("Impact",attackType);
             playerStatusScript.LoseStamina(2);
             audio.PlayOneShot(attackRight);
         }else{
             audio.PlayOneShot(attackMissed);
         }
     }
     if(attackType == "uppercutleft"){
         if(dist < 1.85){
             damageCaused = playerStatusScript.stamina * damageUpperLeft / 100;
             enemy.SendMessage("LoseLife",damageCaused);
             enemy.SendMessage("Impact",attackType);
             playerStatusScript.LoseStamina(5);
             audio.PlayOneShot(attackLeft);
         }else{
             audio.PlayOneShot(attackMissed);
         }
     }
     if(attackType == "uppercutright"){
         if(dist < 1.85){
             damageCaused = playerStatusScript.stamina * damageUpperRight / 100;
             enemy.SendMessage("LoseLife",damageCaused);
             enemy.SendMessage("Impact",attackType);
             playerStatusScript.LoseStamina(5);
             audio.PlayOneShot(attackRight);
         }else{
             audio.PlayOneShot(attackMissed);
         }
     }
     
     levelManagerScript.AddHit("player");
     
             
 }
 
 function Dead(){
     isDead = true;
 }
 
 // If the player was impacted, need to wait the attackRatio seconds for the next attack.
 function Impact(){
     timeForNextAttack = attackRatio;
 }
 
              Answer by FL · May 26, 2013 at 06:28 PM
Use GameObject.FindGameObjectsWithTag() instead of GameObject.FindGameObjectWithTag(). Make the enemy an Array (`var enemy : GameObject[];`) and iterate it when calling Attack().
Change every '`enemy`' in Attack() to '`enemy[i]`' wrap the Attack() in:
 for(var i : int = 0; enemy && (i < enemy.length); i++){
   // Do the things here
 }
 
              Cheers, but I got an error saying "transform is not a member of 'UnityEngine.GameObject[]'" Aswell as 'send message' What can I do to fix this? It occurs here
 var dist = Vector3.Distance(transform.position, enemy.transform.position);
                 Your answer
 
             Follow this Question
Related Questions
Multiple Cars not working 1 Answer
AI Follow Player "Tag" Help 1 Answer
Using tags in edit and build 0 Answers
Turn off multiple lights 0 Answers
Weapon switching 1 Answer