- Home /
Question by
Sansgamer120 · Dec 15, 2020 at 03:53 PM ·
prefabstags
how to make variable refer to a tag
i am making a fps with multiple characters. i want the enemies to attack all players with the tag "Player". How would i do this. i want to replace SC_Damage Reciever variable "Player" with "Player" tag so the enemy attacks all players with the tag. using UnityEngine; using UnityEngine.SceneManagement;
public class SC_EnemySpawner : MonoBehaviour
{
public GameObject enemyPrefab;
public SC_DamageReceiver Player;
public Texture crosshairTexture;
public float spawnInterval = 2; //Spawn new enemy each n seconds
public int enemiesPerWave = 5; //How many enemies per wave
public Transform[] spawnPoints;
float nextSpawnTime = 0;
int waveNumber = 1;
bool waitingForWave = true;
float newWaveTimer = 0;
int enemiesToEliminate;
//How many enemies we already eliminated in the current wave
int enemiesEliminated = 0;
int totalEnemiesSpawned = 0;
// Start is called before the first frame update
void Start()
{
//Wait 10 seconds for new wave to start
newWaveTimer = 2;
waitingForWave = true;
}
// Update is called once per frame
void Update()
{
if (waitingForWave)
{
if (newWaveTimer >= 0)
{
newWaveTimer -= Time.deltaTime;
}
else
{
//Initialize new wave
enemiesToEliminate = waveNumber * enemiesPerWave;
enemiesEliminated = 0;
totalEnemiesSpawned = 0;
waitingForWave = false;
}
}
else
{
if (Time.time > nextSpawnTime)
{
nextSpawnTime = Time.time + spawnInterval;
//Spawn enemy
if (totalEnemiesSpawned < enemiesToEliminate)
{
Transform randomPoint = spawnPoints[Random.Range(0, spawnPoints.Length - 1)];
GameObject enemy = Instantiate(enemyPrefab, randomPoint.position, Quaternion.identity);
SC_NPCEnemy npc = enemy.GetComponent<SC_NPCEnemy>();
npc.playerTransform = Player.transform;
npc.es = this;
totalEnemiesSpawned++;
}
}
}
if (Player.playerHP <= 0)
{
if (Input.GetKeyDown(KeyCode.Space))
{
Scene scene = SceneManager.GetActiveScene();
SceneManager.LoadScene(scene.name);
}
}
}
void OnGUI()
{
GUI.Box(new Rect(10, Screen.height - 35, 100, 25), ((int)Player.playerHP).ToString() + " HP");
if (Player.playerHP <= 0)
{
GUI.Box(new Rect(Screen.width / 2 - 75, Screen.height / 2 - 20, 150, 40), "Game Over\nPress 'Space' to Restart");
}
else
{
GUI.DrawTexture(new Rect(Screen.width / 2 - 3, Screen.height / 2 - 3, 6, 6), crosshairTexture);
}
GUI.Box(new Rect(Screen.width / 2 - 50, 10, 100, 25), (enemiesToEliminate - enemiesEliminated).ToString());
if (waitingForWave)
{
GUI.Box(new Rect(Screen.width / 2 - 125, Screen.height / 4 - 12, 250, 25), "Waiting for Wave " + waveNumber.ToString() + ". " + ((int)newWaveTimer).ToString() + " seconds left...");
}
}
private void NewMethod()
{
GUI.Box(new Rect(Screen.width / 2 - 35, Screen.height - 35, 70, 25), Player.weaponManager.selectedWeapon.bulletsPerMagazine.ToString());
}
public void EnemyEliminated(SC_NPCEnemy enemy)
{
enemiesEliminated++;
if (enemiesToEliminate - enemiesEliminated <= 0)
{
//Start next wave
newWaveTimer = 2;
waitingForWave = true;
waveNumber++;
}
}
}
thanks :)
Comment
Answer by CmdrZin · Dec 15, 2020 at 06:29 PM
Use one of these from the GameObject class.
FindGameObjectsWithTag Returns an array of active GameObjects tagged tag. Returns empty array if no GameObject was found.
FindWithTag Returns one active GameObject tagged tag. Returns null if no GameObject was found.