using UnityEngine; using System.Collections; using System.Collections.Generic; namespace PUNTutorial { public class GameManager : Photon.PunBehaviour { public static GameManager instance; public static GameObject localPlayer; GameObject defaultSpawnPoint; void Awake() { if (instance != null) { DestroyImmediate(gameObject); return; } DontDestroyOnLoad(gameObject); instance = this; defaultSpawnPoint = new GameObject("Default SpawnPoint"); defaultSpawnPoint.transform.position = new Vector3(0, 0.5f, 0); defaultSpawnPoint.transform.SetParent(transform, false); PhotonNetwork.automaticallySyncScene = true; } void Start() { PhotonNetwork.ConnectUsingSettings("PUNTutorial_Pt1"); } public void JoinGame() { RoomOptions ro = new RoomOptions(); ro.maxPlayers = 6; PhotonNetwork.JoinOrCreateRoom("Default Room", ro, null); } public override void OnJoinedRoom() { Debug.Log("Joined Room"); if (PhotonNetwork.isMasterClient) { PhotonNetwork.LoadLevel("Game Scene"); } } void OnLevelWasLoaded(int levelNumber) { if (!PhotonNetwork.inRoom) return; var spawnPoint = GetRandomSpawnPoint(); localPlayer = PhotonNetwork.Instantiate( "Player", spawnPoint.position, spawnPoint.rotation, 0); } Transform GetRandomSpawnPoint() { var spawnPoints = GetAllObjectsOfTypeInScene(); if (spawnPoints.Count == 0) { return defaultSpawnPoint.transform; } else { return spawnPoints[Random.Range(0, spawnPoints.Count)].transform; } } public static List GetAllObjectsOfTypeInScene() { List objectsInScene = new List(); foreach (GameObject go in Resources.FindObjectsOfTypeAll(typeof(GameObject)) as GameObject[]) { if (go.hideFlags == HideFlags.NotEditable || go.hideFlags == HideFlags.HideAndDontSave) continue; if (go.GetComponent() != null) objectsInScene.Add(go); } return objectsInScene; } } }