- Home /
How to refer to run a "void" in one c# script from another to respawn a player
Hello and thank you for reading my question. I have one script called health which refers to the health of the character with the section public void Die (). I have another script called NetworkManager that handles the spawning (SpawnMyPlayer) and respawning (RespawnMyPlayer) of the charecter. I want to make it so when the health script executes public void Die () it would also execute public void RespawnMyPlayer in the NetworkManager script.
Here is the NetworkManager Script:
using UnityEngine;
using System.Collections.Generic;
public class NetworkManager : MonoBehaviour {
public GameObject standbyCamera;
SpawnPoint[] spawnPoints;
public bool offlinemode = false;
bool connecting = false;
List<string> chatMessages;
int maxChatMessages = 3;
// Use this for initialization
public void Start () {
spawnPoints = GameObject.FindObjectsOfType < SpawnPoint> ();
PhotonNetwork.player.name = PlayerPrefs.GetString("Nickname", "Nickname");
chatMessages = new List<string> ();
}
void Connect () {
PhotonNetwork.ConnectUsingSettings ( "0.01");
}
void OnDestroy () {
PlayerPrefs.SetString ("Nickname",PhotonNetwork.player.name);
}
public void AddChatMessages (string m) {
GetComponent<PhotonView> ().RPC ("AddChatMessages_RPC", PhotonTargets.AllBuffered, m);
}
[RPC]
void AddChatMessages_RPC (string m) {
while (chatMessages.Count >= maxChatMessages) {
chatMessages.RemoveAt (0); // Removes the oldest one in the list
}
chatMessages.Add (m);
}
void OnGUI () {
GUILayout.Label (PhotonNetwork.connectionStateDetailed.ToString ());
if (PhotonNetwork.connected == false && connecting == false ) { //The Buttons
GUILayout.BeginArea (new Rect (0, 0, Screen.width, Screen.height));
GUILayout.BeginHorizontal ();
GUILayout.FlexibleSpace ();
GUILayout.BeginVertical ();
GUILayout.FlexibleSpace ();
GUILayout.BeginHorizontal (); //Start of username code
GUILayout.Label ("Nickname: ");
PhotonNetwork.player.name = GUILayout.TextField (PhotonNetwork.player.name);
GUILayout.EndHorizontal (); //End of username code
if (GUILayout.Button ("Offline Mode")) {
connecting = true;
PhotonNetwork.offlineMode = true;
OnJoinedLobby();
}
if (GUILayout.Button ("Online Mode")) {
connecting = true;
Connect ();
}
GUILayout.FlexibleSpace ();
GUILayout.EndVertical ();
GUILayout.FlexibleSpace ();
GUILayout.EndHorizontal ();
GUILayout.EndArea ();
}
if (PhotonNetwork.connected == true && connecting == false) {
GUILayout.BeginArea (new Rect (0, 0, Screen.width, Screen.height));
GUILayout.BeginVertical ();
GUILayout.FlexibleSpace ();
foreach (string msg in chatMessages) {
GUILayout.Label (msg);
}
GUILayout.EndVertical ();
GUILayout.EndArea ();
}
}
void OnJoinedLobby () {
Debug.Log ("Joined Lobby");
PhotonNetwork.JoinRandomRoom ();
}
void OnPhotonRandomJoinFailed () {
Debug.Log ("OnPhotonRandomJoinFailed");
PhotonNetwork.CreateRoom (null);
}
void OnJoinedRoom () {
connecting = false;
Debug.Log ("Joined Room");
SpawnMyPlayer ();
}
public void RespawnMyPlayer () {
standbyCamera.SetActive (true);
AddChatMessages ("Respawning Player: " + PhotonNetwork.player.name);
if (spawnPoints ==null) {
Debug.LogError ("Dude, you never put any spawn points in this map.");
return;
}
SpawnPoint mySpawnPoint = spawnPoints [Random.Range (0, spawnPoints.Length)];
GameObject myPlayerGO = PhotonNetwork.Instantiate ("PlayerControllerMia", mySpawnPoint.transform.position, mySpawnPoint.transform.rotation, 0);
standbyCamera.SetActive (false);
}
public void SpawnMyPlayer () {
AddChatMessages ("Spawning Player: " + PhotonNetwork.player.name);
if (spawnPoints ==null) {
Debug.LogError ("Dude, you never put any spawn points in this map.");
return;
}
SpawnPoint mySpawnPoint = spawnPoints [Random.Range (0, spawnPoints.Length)];
GameObject myPlayerGO = PhotonNetwork.Instantiate ("PlayerControllerMia", mySpawnPoint.transform.position, mySpawnPoint.transform.rotation, 0);
standbyCamera.SetActive (false);
//((MonoBehaviour)myPlayerGO.GetComponent ("FPSInputController")).enabled = true;
((MonoBehaviour)myPlayerGO.GetComponent ("MouseLook")).enabled = true;
((MonoBehaviour)myPlayerGO.GetComponent ("PlayerMovement")).enabled = true;
//((MonoBehaviour)myPlayerGO.GetComponent ("machineGun")).enabled = true;
myPlayerGO.transform.FindChild ("Main Camera").gameObject.SetActive (true);
}
}
Here is the Health script: using UnityEngine; using System.Collections;
public class Health : MonoBehaviour {
public float HP = 100f;
public float currentHP;
private NetworkManager _NetworkManager;
private NetworkManager _networkmanager {
get {
if (_NetworkManager == null) {
_NetworkManager = (NetworkManager)FindObjectOfType (typeof(NetworkManager));
}
return _NetworkManager;
}
}
// Use this for initialization
void Start () {
currentHP = HP;
}
[RPC]
public void TakeDamage (float amt) {
currentHP -= amt;
if (currentHP <= 0) {
Die ();
}
}
public void Die () {
if (GetComponent<PhotonView> ().instantiationId == 0) {
Destroy (gameObject);
GetComponent<NetworkManager>().RespawnMyPlayer(); Debug.Log ("It should be doing RespawnMyPlayer from Network Manager now");
}
else {
if (PhotonNetwork.isMasterClient) {
Debug.Log ("You are the Master Client");
PhotonNetwork.Destroy (gameObject); Debug.Log ("We PhotonNetwork.Destroyed the game object");
_NetworkManager.SpawnMyPlayer(); Debug.Log ("It should be doing RespawnMyPlayer from Network Manager now");
}
}
}
}
Thank you for any help you can provide.
Comment
You need to reference the specific Network$$anonymous$$anager script's instance somehow, see something like this.