(FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
3 participantes
Página 1 de 1
(FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
OLÁ GALERA, EU GOSTARIA DE SABER COMO EU POSSO CRIAR UM MODO DE JOGO; exemplo: eu quero criar uma sala em que apenas sniper são permitidos e as outras armas não...
lá no lobby quando vou criar uma sala aparece uma tela de configurações da sala. Exemplo : tempo, quantos jogadores e etc...
eu queria por ali mais uma opção que seria qual tipo de arma será permitido...
tipo assim
[Todas]
[Apenas Sniper]
[Apenas pistola]
[Apenas Rifles]
[Apenas granadas]
[Apenas faca]
ME AJUDEM POR FAVOR :D :D :D :D :D
lá no lobby quando vou criar uma sala aparece uma tela de configurações da sala. Exemplo : tempo, quantos jogadores e etc...
eu queria por ali mais uma opção que seria qual tipo de arma será permitido...
tipo assim
[Todas]
[Apenas Sniper]
[Apenas pistola]
[Apenas Rifles]
[Apenas granadas]
[Apenas faca]
ME AJUDEM POR FAVOR :D :D :D :D :D
Sheyk- Avançado
- PONTOS : 3352
REPUTAÇÃO : 27
Idade : 25
Respeito as regras :
Re: (FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
Você já tem todo o loby pronto? Por que essa escolha de salas da para apenas separar em cenas ué
Re: (FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
Sim, já está pronto.
Sheyk- Avançado
- PONTOS : 3352
REPUTAÇÃO : 27
Idade : 25
Respeito as regras :
Re: (FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
postar oque mano ?
o script ?
o script ?
Sheyk- Avançado
- PONTOS : 3352
REPUTAÇÃO : 27
Idade : 25
Respeito as regras :
Re: (FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
O script do loby, informando como você o fez, para que possamos entender como fazer a separação das salas em cima disso, pois os sistemas não são todos iguais, então precisamos saber o que você tem.
Re: (FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
using Hashtable = ExitGames.Client.Photon.Hashtable; //Replace default Hashtables with Photon hashtables
public class ConnectMenu : Photon.MonoBehaviour
{
//This is main menu where users will browse and create new rooms
public enum CurrentWindow { Main, PlayNow, Options, Profile, None }
[HideInInspector]
public CurrentWindow currentWindow = CurrentWindow.Main;
public GameObject roomControllerPrefab;
public GameObject buySpotPrefab;
public Texture2D background;
public Texture2D defaultMapPreview;
[System.Serializable]
public class AvailableMaps
{
public string mapName;
public Texture mapPreview;
}
public AvailableMaps[] availableMaps;
Vector2 browseWindowSize = new Vector2(750, 500);
Vector2 roomBrowserScroll = Vector2.zero;
string buildVersion = "0.1";
//Networking
CloudRegionCode selectedRegion = CloudRegionCode.eu; //Photon Cloud Region we will connect to
int totalPlayers = 0;
int totalRooms = 0;
#if UNITY_ANDROID || UNITY_IOS || UNITY_WP8 || UNITY_WP8_1
//Network version for Mobile
string networkVersion = "v2.7.7";
#else
//Network version for Desktop
string networkVersion = "v1.7.5";
#endif
bool createRoom = false;
string roomName = "";
//Available room creation settings
int[] playerLimits = { 2, 4, 6, 8, 10, 12, 14, 16 };
string[] gameModes = { "TDM", "FFA" };
int[] roundDurations = { 600, 900 }; //Each field must correspond to gameMode index, time in seconds
int[] killLimits = { 25, 50, 75, 100 };
int selectedPlayerLimit = 0;
int selectedGameMode = 0;
int selectedMap = 0;
int selectedKillLimit = 1;
bool loadingMap = false;
bool refreshingRooms = false;
int roomFieldCurrentlyHovering = -1;
int selectedRoom = -1;
int currentPing = -1;
RoomInfo[] availableRooms = new RoomInfo[0];
string playerName = "";
string tmpPlayerName;
OptionsSettings os;
string playerNamePrefsName = "PlayerName";
string playerLimitPrefsName = "SelectedPlayerLimit";
string gameModePrefsName = "SelectedGameMode";
string selectedMapPrefsName = "SelectedMap";
// Use this for initialization
void Start ()
{
//Limit game Frames PEr Seconds
DontDestroyOnLoad(gameObject);
currentWindow = CurrentWindow.Main;
os = GetComponent<OptionsSettings>();
os.cm = this;
if(GameSettings.errorText != "")
{
loadingMap = true;
}
PhotonNetwork.PhotonServerSettings.PreferredRegion = selectedRegion;
#if UNITY_ANDROID || UNITY_IOS || UNITY_WP8 || UNITY_WP8_1
//Enable connection timeout on mobile
PhotonNetwork.BackgroundTimeout = 45;
#endif
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
roomName = "Gaming Room " + Random.Range(11111, 99999).ToString();
//aq fica a parte de nickname
//Load stored values if there any
if (GameObject.FindObjectOfType<LoginRegisterUser>().newuser == "0"){
currentWindow = CurrentWindow.Profile;
}
//playerName = GameObject.FindObjectOfType<LoginRegisterUser>().username;
/*playerName = "Player " + Random.Range(11111, 99999).ToString();
if(PlayerPrefs.HasKey(playerNamePrefsName))
{
playerName = PlayerPrefs.GetString(playerNamePrefsName);
}
else
{
currentWindow = CurrentWindow.Profile;
tmpPlayerName = playerName;
}*/
selectedPlayerLimit = PlayerPrefs.HasKey(playerLimitPrefsName) ? PlayerPrefs.GetInt(playerLimitPrefsName) : (int)playerLimits.Length/2;
selectedPlayerLimit = selectedPlayerLimit > -1 && selectedPlayerLimit < playerLimits.Length ? selectedPlayerLimit : (int)playerLimits.Length/2;
selectedGameMode = PlayerPrefs.HasKey(gameModePrefsName) ? PlayerPrefs.GetInt(gameModePrefsName) : 0;
selectedGameMode = selectedGameMode > -1 && selectedGameMode < gameModes.Length ? selectedGameMode : 0;
selectedMap = PlayerPrefs.HasKey(selectedMapPrefsName) ? PlayerPrefs.GetInt(selectedMapPrefsName) : 0;
selectedMap = selectedMap > -1 && selectedMap < availableMaps.Length ? selectedMap : 0;
#if (UNITY_ANDROID || UNITY_IOS || UNITY_WP8 || UNITY_WP8_1) && !UNITY_EDITOR
//Limit screen resolution on Android
int highestVal = 1000; //Width or height cant be more than this value
if(Screen.width == Screen.height)
{
Screen.SetResolution(highestVal, highestVal, true);
}
else
{
if(Screen.width > Screen.height)
{
float aspectRatio = (float)Screen.height/(float)Screen.width;
Screen.SetResolution(highestVal, (int)(highestVal * aspectRatio), true);
}
else
{
float aspectRatio = (float)Screen.width/(float)Screen.height;
Screen.SetResolution((int)(highestVal * aspectRatio), highestVal, true);
}
}
//Also limit framerate
Application.targetFrameRate = 60;
#else
Application.targetFrameRate = 150;
//AudioListener.volume = 0.5f;
#endif
}
// Update is called once per frame
void Update ()
{
os.enabled = currentWindow == CurrentWindow.Options;
}
void OnGUI ()
{
GUI.skin = GameSettings.guiSkin;
//GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), background);
GUI.Label(new Rect(15, Screen.height - 35, 300, 30), buildVersion);
if(loadingMap)
{
if(GameSettings.errorText == "")
{
GUI.Label(new Rect(Screen.width/2 - 150, Screen.height/2 - 15, 300, 30), "Connecting, please wait...", GameSettings.createRoomOptionsStyle);
}
else
{
GUI.color = Color.red;
GUI.Label(new Rect(Screen.width/2 - 150, Screen.height/2 - 15, 700, 30), GameSettings.errorText, GameSettings.createRoomOptionsStyle);
}
GUI.color = Color.white;
if(SceneManager.GetActiveScene().buildIndex == 0)
{
if(GUI.Button(new Rect(Screen.width - 265, Screen.height - 45, 250, 30), "Main Menu"))
{
this.StopAllCoroutines();
if(PhotonNetwork.room != null)
{
PhotonNetwork.LeaveRoom();
}
GameSettings.errorText = "";
loadingMap = false;
}
}
}
else
{
//Initial Screens
if(currentWindow == CurrentWindow.Main)
{
GUI.Label(new Rect(Screen.width/2 - 150, Screen.height/2 - 160, 300, 100), "<color=#FFC240>ALPHA</color>", GameSettings.headerStyle);
if(GUI.Button(new Rect(Screen.width/2 - 125, Screen.height/2 - 45, 250, 30), "Play Now"))
{
currentWindow = CurrentWindow.PlayNow;
createRoom = false;
if(availableRooms.Length == 0)
{
this.StopAllCoroutines();
this.StartCoroutine(RefreshRooms());
}
}
if(GUI.Button(new Rect(Screen.width/2 - 125, Screen.height/2, 250, 30), "Options"))
{
currentWindow = CurrentWindow.Options;
}
if(GUI.Button(new Rect(Screen.width/2 - 125, Screen.height/2 + 45, 250, 30), "Profile"))
{
currentWindow = CurrentWindow.Profile;
tmpPlayerName = playerName;
}
}
if(currentWindow == CurrentWindow.PlayNow)
{
GUI.Window (0, new Rect(Screen.width/2 - browseWindowSize.x/2, Screen.height/2 - browseWindowSize.y/2, browseWindowSize.x, browseWindowSize.y), BrowseRoomsWindow, "");
}
if(currentWindow == CurrentWindow.Options)
{
}
if(currentWindow == CurrentWindow.Profile)
{
GUI.Window (0, new Rect(Screen.width/2 - 150, Screen.height/2 - 100, 300, 200), ProfileWindow, "");
}
#if !UNITY_ANDROID && !UNITY_IOS && !UNITY_WP8 && !UNITY_WP8_1
if(GUI.Button(new Rect(Screen.width - 105, 5, 100, 20), "Fullscreen"))
{
os.SetFullscreen();
}
#endif
//Replace button name nad url with your own site and uncomment it so players can visit your site from game
/*if(GUI.Button(new Rect(5, 5, 150, 20), "nsdevstore.com"))
{
Application.OpenURL("http://nsdevstore.com/");
}*/
}
}
void ProfileWindow(int windowID)
{
GUI.Label(new Rect(15, 0, 300, 35), "User Profile");
if(GUI.Button(new Rect(300 - 30, 5, 25, 25), "", GameSettings.closeButtonStyle))
{
currentWindow = CurrentWindow.Main;
if(!PlayerPrefs.HasKey(playerNamePrefsName))
{
PlayerPrefs.SetString(playerNamePrefsName, playerName);
}
}
GUI.Label(new Rect(15, 40, 300, 30), "Player Name");
tmpPlayerName = GUI.TextField(new Rect(15, 70, 300 - 30, 25), tmpPlayerName, 19);
//ToDO remove this before final build
string tmpNameCheck = (tmpPlayerName.ToLower()).Replace(" ", "");
GUI.enabled = tmpNameCheck.Length > 0;
//salvando o nome novo
/*if(GUI.Button(new Rect(160, 160, 125, 25), "Save"))
{
playerName = tmpPlayerName;
PlayerPrefs.SetString(playerNamePrefsName, playerName);
currentWindow = CurrentWindow.Main;
}*/
GUI.enabled = true;
}
void BrowseRoomsWindow(int windowID)
{
if(!createRoom)
{
GUI.Label(new Rect(15, 0, 450, 35), "Browse Rooms - " + totalPlayers.ToString() + " players - " + totalRooms.ToString() + " rooms - " + PhotonNetwork.PhotonServerSettings.PreferredRegion.ToString());
}
else
{
GUI.Label(new Rect(15, 0, 300, 35), "Create Room");
}
if(GUI.Button(new Rect(browseWindowSize.x - 30, 5, 25, 25), "", GameSettings.closeButtonStyle))
{
currentWindow = CurrentWindow.Main;
}
if(!createRoom)
{
if(refreshingRooms )
{
GUI.enabled = false;
}
else
{
GUI.enabled = true;
}
if(GUI.Button(new Rect(browseWindowSize.x - 360, browseWindowSize.y - 40, 165, 25), "Create New Room"))
{
createRoom = true;
}
//Refresh rooms
if(GUI.Button(new Rect(browseWindowSize.x - 180, browseWindowSize.y - 40, 75, 25), "Refresh"))
{
this.StopAllCoroutines();
this.StartCoroutine(RefreshRooms());
}
if(refreshingRooms || selectedRoom == -1)
{
GUI.enabled = false;
}
else
{
GUI.enabled = true;
}
if(GUI.Button(new Rect(browseWindowSize.x - 90, browseWindowSize.y - 40, 75, 25), "Connect"))
{
StartCoroutine(JoinCreateRoom(availableRooms[selectedRoom].name,
(string)availableRooms[selectedRoom].customProperties["MapName"],
availableRooms[selectedRoom].maxPlayers,
(string)availableRooms[selectedRoom].customProperties["GameMode"],
(float)availableRooms[selectedRoom].customProperties["RoundDuration"],
availableRooms[selectedRoom].customProperties["KillLimit"] != null ? (int)availableRooms[selectedRoom].customProperties["KillLimit"] : -1
));
}
GUI.enabled = true;
GUI.Label(new Rect(10, 39, 270, 21), "Room name", GameSettings.roomBrowserHeadersStyle);
GUI.Label(new Rect(288, 39, 100, 21), "Game mode", GameSettings.roomBrowserHeadersStyle);
GUI.Label(new Rect(396, 39, 100, 21), "Players", GameSettings.roomBrowserHeadersStyle);
GUI.Label(new Rect(504, 39, 100, 21), "Map", GameSettings.roomBrowserHeadersStyle);
GUI.Label(new Rect(612, 39, 100, 21), "Ping", GameSettings.roomBrowserHeadersStyle);
GUILayout.Space(50);
roomBrowserScroll = GUILayout.BeginScrollView(roomBrowserScroll, true, true, GUILayout.Height(browseWindowSize.y - 115));
if(!refreshingRooms)
{
if(availableRooms.Length == 0)
{
GUILayout.Space(15);
GUILayout.BeginHorizontal();
GUILayout.Space(15);
GUILayout.Label("No rooms created at the moment, be first one to create", GUILayout.Width(browseWindowSize.x - 50));
GUILayout.EndHorizontal();
}
else
{
for(int i = 0; i < availableRooms.Length; i++)
{
if(roomFieldCurrentlyHovering != i)
{
GUI.color = new Color(1, 1, 1, 0.35f);
}
else
{
GUI.color = Color.white;
}
GUILayout.BeginHorizontal("box");
GUI.color = selectedRoom == i ? Color.yellow : Color.white;
GUILayout.Label(availableRooms[i].name, GUILayout.Width(260), GUILayout.Height(20));
GUILayout.Space(18);
GUILayout.Label((string)availableRooms[i].customProperties["GameMode"], GUILayout.Width(90), GUILayout.Height(20));
GUILayout.Space(18);
GUILayout.Label(availableRooms[i].playerCount.ToString() + " / " + availableRooms[i].maxPlayers.ToString(), GUILayout.Width(90), GUILayout.Height(20));
GUILayout.Space(18);
GUILayout.Label((string)availableRooms[i].customProperties["MapName"], GUILayout.Width(90), GUILayout.Height(20));
GUILayout.Space(18);
GUILayout.Label(currentPing.ToString(), GUILayout.Width(90), GUILayout.Height(20));
GUILayout.EndHorizontal();
if(GUILayoutUtility.GetLastRect().Contains(Event.current.mousePosition))
{
roomFieldCurrentlyHovering = i;
if(Input.GetMouseButtonDown(0))
{
selectedRoom = i;
}
}
}
GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
if(GUILayoutUtility.GetLastRect().Contains(Event.current.mousePosition))
{
roomFieldCurrentlyHovering = -1;
}
}
}
GUILayout.EndScrollView();
if(Event.current.mousePosition.y < 60 || Event.current.mousePosition.y > (60 + browseWindowSize.y - 115))
{
roomFieldCurrentlyHovering = -1;
}
}else{
GUI.Label(new Rect(15, 40, 300, 30), "Room Name");
roomName = GUI.TextField(new Rect(15, 70, (int)(browseWindowSize.x * 0.75f), 25), roomName, 55);
GUI.Label(new Rect(15,100, 300, 30), "Player Limit");
GUI.enabled = selectedPlayerLimit > 0;
if(GUI.Button(new Rect(15, 130, 25, 25), "<"))
{
selectedPlayerLimit --;
}
GUI.enabled = true;
GUI.Label(new Rect(45,130, 75, 25), playerLimits[selectedPlayerLimit].ToString(), GameSettings.createRoomOptionsStyle);
GUI.enabled = selectedPlayerLimit < playerLimits.Length - 1;
if(GUI.Button(new Rect(125, 130, 25, 25), ">"))
{
selectedPlayerLimit ++;
}
GUI.enabled = true;
GUI.Label(new Rect(15,160, 300, 30), "Game Mode");
GUI.enabled = selectedGameMode > 0;
if(GUI.Button(new Rect(15, 190, 25, 25), "<"))
{
selectedGameMode --;
}
GUI.enabled = true;
GUI.Label(new Rect(45,190, 75, 25), gameModes[selectedGameMode], GameSettings.createRoomOptionsStyle);
GUI.enabled = selectedGameMode < gameModes.Length - 1;
if(GUI.Button(new Rect(125, 190, 25, 25), ">"))
{
selectedGameMode ++;
}
if(gameModes[selectedGameMode] == "FFA")
{
GUI.enabled = true;
GUI.Label(new Rect(185,160, 300, 30), "Kill Limit");
GUI.enabled = selectedKillLimit > 0;
if(GUI.Button(new Rect(185, 190, 25, 25), "<"))
{
selectedKillLimit --;
}
GUI.enabled = true;
GUI.Label(new Rect(210,190, 75, 25), killLimits[selectedKillLimit].ToString(), GameSettings.createRoomOptionsStyle);
GUI.enabled = selectedKillLimit < killLimits.Length - 1;
if(GUI.Button(new Rect(290, 190, 25, 25), ">"))
{
selectedKillLimit ++;
}
}
GUI.enabled = true;
GUI.Label(new Rect(15,220, 300, 30), "Game Map");
GUI.enabled = selectedMap > 0;
if(GUI.Button(new Rect(15, 250, 25, 25), "<"))
{
selectedMap --;
}
GUI.enabled = true;
GUI.Label(new Rect(45 , 250, 240, 30), availableMaps[selectedMap].mapName, GameSettings.createRoomOptionsStyle);
GUI.enabled = selectedMap < availableMaps.Length - 1;
if(GUI.Button(new Rect(290, 250, 25, 25), ">"))
{
selectedMap ++;
}
GUI.enabled = true;
GUI.DrawTexture(new Rect(15, 285, 300, 150), availableMaps[selectedMap].mapPreview ? availableMaps[selectedMap].mapPreview : defaultMapPreview);
if(GUI.Button(new Rect(browseWindowSize.x - 90, browseWindowSize.y - 40, 75, 25), "Create"))
{
StartCoroutine(JoinCreateRoom(
roomName, availableMaps[selectedMap].mapName, playerLimits[selectedPlayerLimit], gameModes[selectedGameMode], (float)roundDurations[selectedGameMode], gameModes[selectedGameMode] == "FFA" ? killLimits[selectedKillLimit] : -1
));
//Remember player settings when creating new room
PlayerPrefs.SetInt(playerLimitPrefsName, selectedPlayerLimit);
PlayerPrefs.SetInt(gameModePrefsName, selectedGameMode);
PlayerPrefs.SetInt(selectedMapPrefsName, selectedMap);
}
if(GUI.Button(new Rect(15, browseWindowSize.y - 40, 75, 25), "Back"))
{
createRoom = false;
}
}
if(refreshingRooms)
{
GUI.Box(new Rect(browseWindowSize.x/2 - 75, browseWindowSize.y/2 - 30, 150, 30), "Refreshing...");
}
//GUI.DragWindow (new Rect (0, 0, 10000, 35));
}
//Networking Part ********************************************************************************************************************************************
IEnumerator RefreshRooms ()
{
refreshingRooms = true;
selectedRoom = -1;
while (PhotonNetwork.connected)
{
if (PhotonNetwork.connectionState != ConnectionState.Disconnecting)
{
PhotonNetwork.Disconnect();
}
yield return null;
}
while (!PhotonNetwork.connected)
{
if(PhotonNetwork.connectionState != ConnectionState.InitializingApplication && PhotonNetwork.connectionState != ConnectionState.Connecting &&
PhotonNetwork.connectionState != ConnectionState.Disconnecting && PhotonNetwork.connectionState != ConnectionState.Connected)
{
PhotonNetwork.ConnectUsingSettings(networkVersion);
}
yield return null;
}
yield return new WaitForSeconds(0.75f);
currentPing = PhotonNetwork.GetPing();
availableRooms = PhotonNetwork.GetRoomList();
//print (availableRooms.Length.ToString() + " available rooms");
totalPlayers = PhotonNetwork.countOfPlayers;
totalRooms = availableRooms.Length;
refreshingRooms = false;
}
IEnumerator JoinCreateRoom (string newRoomName, string newMapName, int newMaxPlayers, string newGameMode, float roundDuration, int newKillLimit)
{
loadingMap = true;
print ("Begin joining/creating new room");
while(!PhotonNetwork.connected)
{
if(PhotonNetwork.connectionState != ConnectionState.InitializingApplication && PhotonNetwork.connectionState != ConnectionState.Connecting &&
PhotonNetwork.connectionState != ConnectionState.Disconnecting && PhotonNetwork.connectionState != ConnectionState.Connected)
{
PhotonNetwork.ConnectUsingSettings(networkVersion);
}
yield return null;
}
yield return new WaitForSeconds(0.5f);
PhotonNetwork.playerName = playerName;
//Create Room
if(PhotonNetwork.connected)
{
Hashtable roomProperties = new Hashtable();
roomProperties["MapName"] = newMapName;
roomProperties["GameMode"] = newGameMode;
roomProperties["RoundDuration"] = roundDuration;
if(newKillLimit > 0)
{
roomProperties["KillLimit"] = newKillLimit; //Used only for FFA mode
}
string[] exposedProps = new string[newKillLimit > 0 ? 4 : 3];
exposedProps[0] = "MapName";
exposedProps[1] = "GameMode";
exposedProps[2] = "RoundDuration";
if(newKillLimit > 0)
{
exposedProps[3] = "KillLimit";
}
RoomOptions roomOptions = new RoomOptions();
roomOptions.cleanupCacheOnLeave = true;
roomOptions.isOpen = true;
roomOptions.isVisible = true;
roomOptions.maxPlayers = (byte)newMaxPlayers;
roomOptions.customRoomProperties = roomProperties;
roomOptions.customRoomPropertiesForLobby = exposedProps;
PhotonNetwork.JoinOrCreateRoom(newRoomName, roomOptions, null);
}else{
GameSettings.errorText = "Unable to connect to Photon Server, please try again";
yield return null;
}
}
void OnJoinedRoom()
{
//Load room map
print ("Done joining/creating new room");
PhotonNetwork.isMessageQueueRunning = false;
SceneManager.LoadSceneAsync((string)PhotonNetwork.room.customProperties["MapName"]);
}
void OnPhotonCreateGameFailed()
{
GameSettings.errorText = "Unable to create / join new room, please try again";
this.StopAllCoroutines();
}
void OnPhotonJoinRoomFailed()
{
GameSettings.errorText = "Unable to create / join new room, please try again";
this.StopAllCoroutines();
}
void OnFailedToConnectToPhoton()
{
GameSettings.errorText = "Connection problem, pelase try again";
this.StopAllCoroutines();
}
void OnLevelWasLoaded(int index)
{
if(index > 0)
{
//Spawn all required objects
Transform allPoints = GameObject.Find("_ReferencePoints").transform;
Transform welcomeCameraRef = allPoints.Find("WelcomeCamera");
GameObject roomControllerObject = Instantiate(roomControllerPrefab, welcomeCameraRef.position, welcomeCameraRef.rotation) as GameObject;
RoomController roomController = roomControllerObject.GetComponent<RoomController>();
Transform buySpots = allPoints.Find("BuySpots");
foreach(Transform child in buySpots)
{
GameObject buySpotObj = Instantiate(buySpotPrefab, child.position, child.rotation) as GameObject;
AmmoSpot bs = buySpotObj.GetComponent<AmmoSpot>();
bs.rc = roomController;
bs.thisT = buySpotObj.transform;
}
Transform ladders = allPoints.Find("Ladders");
foreach(Transform child in ladders)
{
child.gameObject.AddComponent<LadderScript>();
}
Transform spawnPoints = allPoints.Find("SpawnPoints");
foreach(Transform child in spawnPoints)
{
if(child.name.StartsWith("TeamASpawn"))
{
roomController.teamASpawnPoints.Add (child);
}
if(child.name.StartsWith("TeamBSpawn"))
{
roomController.teamBSpawnPoints.Add (child);
}
}
Destroy(gameObject);
}
}
}
Sheyk- Avançado
- PONTOS : 3352
REPUTAÇÃO : 27
Idade : 25
Respeito as regras :
Sheyk- Avançado
- PONTOS : 3352
REPUTAÇÃO : 27
Idade : 25
Respeito as regras :
Re: (FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
Ok, o único lugar do script que vi algum load foi aqui:
aonde o SceneManager faz o load na cena informada pelas suas propriedades do PhotonNetwork...
Você pode mudar esta cena para cada tipo de mapa, basta separar ali. E em cada mapa fazer um gerenciamento diferente de armas.
Não pude testar muito por que estão faltando muitas coisas para que eu consiga testar este script, como o PhotonNetwork, dentre outras coisas.
- Código:
void OnJoinedRoom()
{
//Load room map
print ("Done joining/creating new room");
PhotonNetwork.isMessageQueueRunning = false;
SceneManager.LoadSceneAsync((string)PhotonNetwork.room.customProperties["MapName"]);
}
aonde o SceneManager faz o load na cena informada pelas suas propriedades do PhotonNetwork...
Você pode mudar esta cena para cada tipo de mapa, basta separar ali. E em cada mapa fazer um gerenciamento diferente de armas.
Não pude testar muito por que estão faltando muitas coisas para que eu consiga testar este script, como o PhotonNetwork, dentre outras coisas.
Re: (FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
pode fazer um exemplo de como separar ai pra min por favor, eu não entendi direito...
Sheyk- Avançado
- PONTOS : 3352
REPUTAÇÃO : 27
Idade : 25
Respeito as regras :
Re: (FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
Eu, quero fazer isso para por modos bacanas que vem em minha mente...
Por enquanto o jogo só tem dois modos que são eles : TDM e FFA.
Por enquanto o jogo só tem dois modos que são eles : TDM e FFA.
Sheyk- Avançado
- PONTOS : 3352
REPUTAÇÃO : 27
Idade : 25
Respeito as regras :
Re: (FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
Como você informa a cena que vai ser carregada a esta variável?
((string)PhotonNetwork
Você precisa chamar aquela void, mas algum outro script que chama ela, pois não há nenhuma referência dela no script atual.
Neste outro script que está chamando a void e informando a cena que vai ser carregada que você precisa fazer o gerenciamento. Precisaria ver como é este outro script
((string)PhotonNetwork
Você precisa chamar aquela void, mas algum outro script que chama ela, pois não há nenhuma referência dela no script atual.
Neste outro script que está chamando a void e informando a cena que vai ser carregada que você precisa fazer o gerenciamento. Precisaria ver como é este outro script
Re: (FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
- Código:
}else{
GUI.Label(new Rect(15, 40, 300, 30), "Room Name");
roomName = GUI.TextField(new Rect(15, 70, (int)(browseWindowSize.x * 0.75f), 25), roomName, 55);
GUI.Label(new Rect(15,100, 300, 30), "Player Limit");
GUI.enabled = selectedPlayerLimit > 0;
if(GUI.Button(new Rect(15, 130, 25, 25), "<"))
{
selectedPlayerLimit --;
}
GUI.enabled = true;
GUI.Label(new Rect(45,130, 75, 25), playerLimits[selectedPlayerLimit].ToString(), GameSettings.createRoomOptionsStyle);
GUI.enabled = selectedPlayerLimit < playerLimits.Length - 1;
if(GUI.Button(new Rect(125, 130, 25, 25), ">"))
{
selectedPlayerLimit ++;
}
GUI.enabled = true;
GUI.Label(new Rect(15,160, 300, 30), "Game Mode");
GUI.enabled = selectedGameMode > 0;
if(GUI.Button(new Rect(15, 190, 25, 25), "<"))
{
selectedGameMode --;
}
GUI.enabled = true;
GUI.Label(new Rect(45,190, 75, 25), gameModes[selectedGameMode], GameSettings.createRoomOptionsStyle);
GUI.enabled = selectedGameMode < gameModes.Length - 1;
if(GUI.Button(new Rect(125, 190, 25, 25), ">"))
{
selectedGameMode ++;
}
if(gameModes[selectedGameMode] == "FFA")
{
GUI.enabled = true;
GUI.Label(new Rect(185,160, 300, 30), "Kill Limit");
GUI.enabled = selectedKillLimit > 0;
if(GUI.Button(new Rect(185, 190, 25, 25), "<"))
{
selectedKillLimit --;
}
GUI.enabled = true;
GUI.Label(new Rect(210,190, 75, 25), killLimits[selectedKillLimit].ToString(), GameSettings.createRoomOptionsStyle);
GUI.enabled = selectedKillLimit < killLimits.Length - 1;
if(GUI.Button(new Rect(290, 190, 25, 25), ">"))
{
selectedKillLimit ++;
}
}
GUI.enabled = true;
GUI.Label(new Rect(15,220, 300, 30), "Game Map");
GUI.enabled = selectedMap > 0;
if(GUI.Button(new Rect(15, 250, 25, 25), "<"))
{
selectedMap --;
}
GUI.enabled = true;
GUI.Label(new Rect(45 , 250, 240, 30), availableMaps[selectedMap].mapName, GameSettings.createRoomOptionsStyle);
GUI.enabled = selectedMap < availableMaps.Length - 1;
if(GUI.Button(new Rect(290, 250, 25, 25), ">"))
{
selectedMap ++;
}
GUI.enabled = true;
GUI.DrawTexture(new Rect(15, 285, 300, 150), availableMaps[selectedMap].mapPreview ? availableMaps[selectedMap].mapPreview : defaultMapPreview);
if(GUI.Button(new Rect(browseWindowSize.x - 90, browseWindowSize.y - 40, 75, 25), "Create"))
{
StartCoroutine(JoinCreateRoom(
roomName, availableMaps[selectedMap].mapName, playerLimits[selectedPlayerLimit], gameModes[selectedGameMode], (float)roundDurations[selectedGameMode], gameModes[selectedGameMode] == "FFA" ? killLimits[selectedKillLimit] : -1
));
//Remember player settings when creating new room
PlayerPrefs.SetInt(playerLimitPrefsName, selectedPlayerLimit);
PlayerPrefs.SetInt(gameModePrefsName, selectedGameMode);
PlayerPrefs.SetInt(selectedMapPrefsName, selectedMap);
}
if(GUI.Button(new Rect(15, browseWindowSize.y - 40, 75, 25), "Back"))
{
createRoom = false;
}
}
seria essa parte do gerenciamento da cena ?
Sheyk- Avançado
- PONTOS : 3352
REPUTAÇÃO : 27
Idade : 25
Respeito as regras :
Re: (FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
Está aqui no GUI.Label
Você deve ter em alguma array no código, um lugar aonde você linka todos os "availableMaps"
e através dos botões, você seleciona o mapa que você quer, por este trecho que você postou. E o interessante desta parte é que já tem uma variável que define o modo de jogo
Você está utilizando ela para alguma coisa?
Bom, em todos os casos, você pode criar cenas específicas no meio deste monte de cenas que devem estar nessa array ali, e separar em uma segunda array, para a seleção. Mas fica complicado dar detalhes sem poder ver o código todo.
- Código:
availableMaps[selectedMap].mapName
Você deve ter em alguma array no código, um lugar aonde você linka todos os "availableMaps"
e através dos botões, você seleciona o mapa que você quer, por este trecho que você postou. E o interessante desta parte é que já tem uma variável que define o modo de jogo
- Código:
gameModes[selectedGameMode]
Você está utilizando ela para alguma coisa?
Bom, em todos os casos, você pode criar cenas específicas no meio deste monte de cenas que devem estar nessa array ali, e separar em uma segunda array, para a seleção. Mas fica complicado dar detalhes sem poder ver o código todo.
Re: (FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
Eu espero de coração que você esteja escrevendo teu FPS se baseando em um servidor autoritário, ou um dia você terá que reescrever ele.
Re: (FPS MULTIPLAYER) COMO CRIAR UM MODO DE JOGO ?
:D :D :bounce: :bball:
Sheyk- Avançado
- PONTOS : 3352
REPUTAÇÃO : 27
Idade : 25
Respeito as regras :
Tópicos semelhantes
» Como fazer um modo multiplayer em um jogo que está off-line?
» como criar jogo fps para android ?
» Como criar um jogo de sobrevivência - Unity 5
» [RESOLVIDO] Como criar varias contas em um jogo como PlayerPrefs.
» Como criar jogo de cartas
» como criar jogo fps para android ?
» Como criar um jogo de sobrevivência - Unity 5
» [RESOLVIDO] Como criar varias contas em um jogo como PlayerPrefs.
» Como criar jogo de cartas
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos