how to refrence script through public transform

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 :slight_smile:

see C# Scripting in Unity: The Observer Pattern - Unity Learn
for examples on how to do it. Non-trivial.