• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Sansgamer120 · Dec 18, 2020 at 03:08 PM · arraystags

How to make multiple objects share same variable

I have multiple players that i want the enemies to attack. I tried using arrays and tags, but my case is different. My script depends on another scripts that makes the player take damage and the enemy treats that script as the player. Here is the script for the enemy that assigns the player to the enemy, this is the one in want to have multiple players in the SC_DamageReciever variable. I think arrays would work, but because of the references to the other script, tags could work.

 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.U))
             {
                 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 'U' 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++;
         }
     }
 }




this is the damage reciever

 using UnityEngine;
 
 public class SC_DamageReceiver : MonoBehaviour, IEntity
 {
     //This script will keep track of player HP
     public float playerHP = 100;
     public SC_CharacterController playerController;
     public SC_WeaponManager weaponManager;
 
     public void ApplyDamage(float points)
     {
         playerHP -= points;
 
         if (playerHP <= 0)
         {
             //Player is dead
             playerController.canMove = false;
             playerHP = 0;
         }
     }
 }
 

this is IEntity

 //Entity interafce
 interface IEntity
 {
     void ApplyDamage(float points);
 }


thanks in advance :)

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
1

Answer by Zaeran · Dec 18, 2020 at 06:30 PM

Static variables are shared over every instance of the script.

If you make a static array of list of the SC_DamageReceiver class, you will be able to have all instances of that class add themselves to the list when they're created

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

The best place to ask and answer questions about development with Unity.

To help users navigate the site we have posted a site navigation guide.

If you are a new user to Unity Answers, check out our FAQ for more information.

Make sure to check out our Knowledge Base for commonly asked Unity questions.

If you are a moderator, see our Moderator Guidelines page.

We are making improvements to UA, see the list of changes.



Follow this Question

Answers Answers and Comments

111 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

My array does not update when object is destroyed. How do I fix it? (java) 2 Answers

Array works in editor, not in build 3 Answers

How to check a collided gameobject for valid tags? 2 Answers

Using similar to GameObject.FindObjectsWithTag but for tag.contains. 0 Answers

Need help with setting all items of a specific tag to "inactive" when i die. 0 Answers

  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges