I am making a game that requires a variable to refer to multiple game objects. the issue is my script depends on another script. basickly I need SC_DamageReciever transform to refrence the script SC_DamageReciever for weapon manager and playerHP. here is the script that needs to be modified.
using UnityEngine;
using UnityEngine.SceneManagement;
public class SC_EnemySpawner : MonoBehaviour
{
public GameObject enemyPrefab;
public Transform playerHP;
public Transform SC_DamageReceiver;
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 = SC_DamageReceiver.transform;
npc.es = this;
totalEnemiesSpawned++;
}
}
}
if (SC_DamageReceiver.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)SC_DamageReceiver.playerHP).ToString() + " HP");
if (SC_DamageReceiver.playerHP <= 0)
{
GUI.Box(new Rect(Screen.width / 2 - 75, Screen.height / 2 - 20, 150, 40), "Game Over
Press ā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), SC_DamageReceiver.weaponManager.selectedWeapon.bulletsPerMagazine.ToString());
}
public void EnemyEliminated(SC_NPCEnemy enemy)
{
enemiesEliminated++;
if (enemiesToEliminate - enemiesEliminated <= 0)
{
//Start next wave
newWaveTimer = 2;
waitingForWave = true;
waveNumber++;
}
}
}
and here is the script that is refrenced.
using System;
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;
}
}
internal static SC_DamageReceiver[] FindWithTag(string v)
{
throw new NotImplementedException();
}
}
thanks