- 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