Quantcast
Channel: Latest Questions on Unity Answers
Viewing all articles
Browse latest Browse all 171066

How to refer to run a "void" in one c# script from another to respawn a player

$
0
0
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 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 (); } void Connect () { PhotonNetwork.ConnectUsingSettings ( "0.01"); } void OnDestroy () { PlayerPrefs.SetString ("Nickname",PhotonNetwork.player.name); } public void AddChatMessages (string m) { GetComponent ().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 ().instantiationId == 0) { Destroy (gameObject); GetComponent().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.

Viewing all articles
Browse latest Browse all 171066

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>