[RESOLVIDO]Mudar de scene multiplayer?
5 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 2
Página 1 de 2 • 1, 2
[RESOLVIDO]Mudar de scene multiplayer?
Eu estou com uma duvida aqui sobre mudança de scene em multiplayer procurei na net mais nao achei nada.
Eu queria saber se funciona normal como um jogo simples?
Eu queria saber se funciona normal como um jogo simples?
Última edição por Callyde Jr em Sáb maio 26, 2018 1:16 pm, editado 1 vez(es)
Re: [RESOLVIDO]Mudar de scene multiplayer?
Tipo assim ao collidir passar uma porta e ir para outra scene ?
e continuar com o mesmo personagem.
e continuar com o mesmo personagem.
Re: [RESOLVIDO]Mudar de scene multiplayer?
Acredito q sim;
Me add no Skype: Ph Progammer
Me add no Skype: Ph Progammer
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
na Versão 5.6 eu estava com um problema ao trocar de cena, quando eu trocava de cena levava todos os players para a nova cena, não sei se existe uma forma de dividir os players entre as cenas, caso exista alguém podia compartilha como faz com a gente.
sabbath- MembroAvançado
- PONTOS : 3365
REPUTAÇÃO : 24
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
No caso se estiver usando o HLAPI da Unity, cada scprit server(NetworkManager) utiliza uma cena online e uma offline, que quando se inicia/conecte ou pare o servidor ele troca para a cena de acordo... Para ter cenas e players distintos, terá que fazer um servidor master(usando o LLAPI por exemplo, mais difícil, mas muito mais fácil de controlar, por tu mesmo criar os conceitos e tudo mais) que irá tomar conta das cenas e por lá terá um controle... Com isso tu irá ter vários servers, um com cada cena suponhamos e por assim o player poderá ir e voltar para cada cena desejada sem precisar que outros players vá junto. Com o HLAPI conforme o servidor toma conta de uma cena online apenas(ou mesmo que tiverá mais), quando muda-se no server/host, todos os clientes são "obrigados" a partir para a outra cena também, por isso que não há como ficar um jogador em cada por isso... Criando um servidor para cada cena e interligando-os, fica de maneira mais simples o controle...
Re: [RESOLVIDO]Mudar de scene multiplayer?
Eu justamente estava pensando como o sistema de dano, um player leva o dano e os outros nao,
mais vou da uma pesquisada sobre esse assunto aqui
mais vou da uma pesquisada sobre esse assunto aqui
Re: [RESOLVIDO]Mudar de scene multiplayer?
Qualquer dúvida ou ajuda, estaremos dispostos a fortalecer!Callyde Jr escreveu:Eu justamente estava pensando como o sistema de dano, um player leva o dano e os outros nao,
mais vou da uma pesquisada sobre esse assunto aqui
Re: [RESOLVIDO]Mudar de scene multiplayer?
Eu achei umas referencias Aqui
mais nao entendi ainda como faria esse sistema voce tem alguns ex;?
mais nao entendi ainda como faria esse sistema voce tem alguns ex;?
Re: [RESOLVIDO]Mudar de scene multiplayer?
pelo que vi; o que você achou é sobe HLAPI;
achei isto sobre LLAPI;
https://docs.unity3d.com/Manual/UnityWebRequest-LLAPI.html
e achei este video no Youtube;
ele faz um simples(mas bota complexidade nisso) multiplayer;
https://m.youtube.com/watch?v=qGkkaNkq8co
achei isto sobre LLAPI;
https://docs.unity3d.com/Manual/UnityWebRequest-LLAPI.html
e achei este video no Youtube;
ele faz um simples(mas bota complexidade nisso) multiplayer;
https://m.youtube.com/watch?v=qGkkaNkq8co
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
recagonlei escreveu:Qualquer dúvida ou ajuda, estaremos dispostos a fortalecer!Callyde Jr escreveu:Eu justamente estava pensando como o sistema de dano, um player leva o dano e os outros nao,
mais vou da uma pesquisada sobre esse assunto aqui
SURGIU UMA DUVIDA;
...
_________________________________________________________________________________
ESSE LLAPI FUNCIONA SOMENTE EM LOCAL PLAYER OU TAMBÉM FUNCIONA A DISTANCIA COMO UM SERVER?
___________________________________________________________________________________________
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
Com toda certeza... No game que estamos desenvolvendo mesmo, está sendo basicamente inteiro codado por LLAPI... Temos um master servidor, onde controla o lobby e as salas, feitas tudo por LLAPI... A diferença entre um e outro, que essa API é uma api com elementos básicos, para que você crie seus sistemas. É basicamente bem simples de se mexer, só da uma estudada legal que verá a praticidade da mesma... Qualquer coisa, só da um toque...Phph09 escreveu:recagonlei escreveu:Qualquer dúvida ou ajuda, estaremos dispostos a fortalecer!Callyde Jr escreveu:Eu justamente estava pensando como o sistema de dano, um player leva o dano e os outros nao,
mais vou da uma pesquisada sobre esse assunto aquiSURGIU UMA DUVIDA;
...
_________________________________________________________________________________
ESSE LLAPI FUNCIONA SOMENTE EM LOCAL PLAYER OU TAMBÉM FUNCIONA A DISTANCIA COMO UM SERVER?
___________________________________________________________________________________________
Re: [RESOLVIDO]Mudar de scene multiplayer?
Com certeza que é só em local player ou com certeza que funciona a distancia?
Até mesmo o nome já diz muito:
(Vi Na Documentação)
HLAPI : High Level API , algo que expressa algo mais pronto, e completo;
LLAPII : Low Level API , algo que expressa algo em partes, incompleto, você terá nesse caso que juntar essas partes. Permitindo assim um maior controle e uma maior flexividade
@Callyde jr:
Esse video que você achou é sobre HLAPI;
você quer usar LLAPI ou HLAPI
Até mesmo o nome já diz muito:
(Vi Na Documentação)
HLAPI : High Level API , algo que expressa algo mais pronto, e completo;
LLAPII : Low Level API , algo que expressa algo em partes, incompleto, você terá nesse caso que juntar essas partes. Permitindo assim um maior controle e uma maior flexividade
@Callyde jr:
Esse video que você achou é sobre HLAPI;
você quer usar LLAPI ou HLAPI
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
Com certeza que o HLAPI eu achei um topico sobre essa pergunta mais ainda estou estudando sobre varias scenes.
O topico esta Aqui
O topico esta Aqui
Re: [RESOLVIDO]Mudar de scene multiplayer?
Com certeza que funciona a distância... Fiz testes abrindo apenas a porta do modem e usando o no-ip, funcionou tranquilamente...Phph09 escreveu:Com certeza que é só em local player ou com certeza que funciona a distancia?
Até mesmo o nome já diz muito:
(Vi Na Documentação)
HLAPI : High Level API , algo que expressa algo mais pronto, e completo;
LLAPII : Low Level API , algo que expressa algo em partes, incompleto, você terá nesse caso que juntar essas partes. Permitindo assim um maior controle e uma maior flexividade
@Callyde jr:
Esse video que você achou é sobre HLAPI;
você quer usar LLAPI ou HLAPI
Re: [RESOLVIDO]Mudar de scene multiplayer?
Acho que uma solução para você fazer isso seria usar layers;
Tipo: Coloca todos os mapas em uma unica cena, ae no mapa 1 vc coloca um collider com trigger e quanto ativar esse trigger vc faz com que o player receba a layer Mapa1 e somente renderize o mapa1 e somente os players com a layer Mapa1;
quando ele for para o mapa2 vc faz ele receber a layer Mapa2, e somente renderizar o mapa2 e os players com a Layer Mapa2;etc...
Solução bem na gambiarra msm;
Tipo: Coloca todos os mapas em uma unica cena, ae no mapa 1 vc coloca um collider com trigger e quanto ativar esse trigger vc faz com que o player receba a layer Mapa1 e somente renderize o mapa1 e somente os players com a layer Mapa1;
quando ele for para o mapa2 vc faz ele receber a layer Mapa2, e somente renderizar o mapa2 e os players com a Layer Mapa2;etc...
Solução bem na gambiarra msm;
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
É uma solução interessante, só não sei se é viável, acho que em questão de segurança, não daria muito bom...Phph09 escreveu:Acho que uma solução para você fazer isso seria usar layers;
Tipo: Coloca todos os mapas em uma unica cena, ae no mapa 1 vc coloca um collider com trigger e quanto ativar esse trigger vc faz com que o player receba a layer Mapa1 e somente renderize o mapa1 e somente os players com a layer Mapa1;
quando ele for para o mapa2 vc faz ele receber a layer Mapa2, e somente renderizar o mapa2 e os players com a Layer Mapa2;etc...
Solução bem na gambiarra msm;
Acho que uma solução melhor é deixar os mapas separados bem longes e teleporta-los para lá dai... Ficaria mais fácil, como se fossem outras cidades interligadas por limbos ou alguma coisa!
Re: [RESOLVIDO]Mudar de scene multiplayer?
Eu achei esse script mais esta dando erro em NetworkView que a unity 2017 nao tem.
?
?
- Código:
using UnityEngine;
using UnityEngine.Network;
using System.Collections;
[RequireComponent(NetworkView)]
public class LevelMananger : MonoBehaviour {
string[] supportedNetworkLevels = new[]{ "mylevel" };
string disconnectedLevel = "loader";
int lastLevelPrefix = 0;
NetworkView networkView;
void Awake ()
{
// Network level loading is done in a separate channel.
DontDestroyOnLoad(this);
networkView = new NetworkView ();
networkView.group = 1;
Application.LoadLevel(disconnectedLevel);
}
void OnGUI ()
{
if (Network.peerType != NetworkPeerType.Disconnected)
{
GUILayout.BeginArea(Rect(0, Screen.height - 30, Screen.width, 30));
GUILayout.BeginHorizontal();
foreach (var level in supportedNetworkLevels)
{
if (GUILayout.Button(level))
{
Network.RemoveRPCsInGroup(0);
Network.RemoveRPCsInGroup(1);
networkView.RPC( "LoadLevel", RPCMode.AllBuffered, level, lastLevelPrefix + 1);
}
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.EndArea();
}
}
[RPC]
IEnumerator LoadLevel (string level, int levelPrefix)
{
lastLevelPrefix = levelPrefix;
// There is no reason to send any more data over the network on the default channel,
// because we are about to load the level, thus all those objects will get deleted anyway
Network.SetSendingEnabled(0, false);
// We need to stop receiving because first the level must be loaded first.
// Once the level is loaded, rpc's and other state update attached to objects in the level are allowed to fire
Network.isMessageQueueRunning = false;
// All network views loaded from a level will get a prefix into their NetworkViewID.
// This will prevent old updates from clients leaking into a newly created scene.
Network.SetLevelPrefix(levelPrefix);
Application.LoadLevel(level);
yield return;
// Allow receiving data again
Network.isMessageQueueRunning = true;
// Now the level has been loaded and we can start sending out data to clients
Network.SetSendingEnabled(0, true);
var gameObjects = FindObjectsOfType(GameObject) as GameObject[];
foreach (var go in gameObjects)
go.SendMessage("OnNetworkLoadedLevel", SendMessageOptions.DontRequireReceiver);
}
void OnDisconnectedFromServer ()
{
Application.LoadLevel(disconnectedLevel);
}
}
Re: [RESOLVIDO]Mudar de scene multiplayer?
tente importar a ; using UntyEngine.Networking;
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
Hummm quando eu chegar em casa vou fazer obrigado.
Achei algo aqui pesquisando eu acho que vai funcionar
Você pode mudar cenas de jogos em rede em tempo de execução com este comando:
[url= http://docs.unity3d.com/ScriptReference/Networking.NetworkManager.ServerChangeScene.html]Ref:[/url]
Achei algo aqui pesquisando eu acho que vai funcionar
Você pode mudar cenas de jogos em rede em tempo de execução com este comando:
- Código:
void ChangeScene ()
{
NetworkManager.singleton.ServerChangeScene ("Nome da cena");
}
[url= http://docs.unity3d.com/ScriptReference/Networking.NetworkManager.ServerChangeScene.html]Ref:[/url]
Re: [RESOLVIDO]Mudar de scene multiplayer?
Mas ae tem que importar a classe NetworkManager no lugar da do MonoBehaviour
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
No script assima aparece esse erro ?
- Código:
Assets/Scripts/LevelMananger.cs(62,15): error CS1627: Expression expected after yield return
- Código:
using UnityEngine;
using UnityEngine.Network;
using System.Collections;
using UnityEngine.Networking;
using System.Collections.Generic;
[RequireComponent(NetworkView)]
public class LevelMananger : MonoBehaviour {
string[] supportedNetworkLevels = new[]{ "mylevel" };
string disconnectedLevel = "loader";
int lastLevelPrefix = 0;
NetworkView networkView;
void Awake ()
{
// Network level loading is done in a separate channel.
DontDestroyOnLoad(this);
networkView = new NetworkView ();
networkView.group = 1;
Application.LoadLevel(disconnectedLevel);
}
void OnGUI ()
{
if (Network.peerType != NetworkPeerType.Disconnected)
{
GUILayout.BeginArea(Rect(0, Screen.height - 30, Screen.width, 30));
GUILayout.BeginHorizontal();
foreach (var level in supportedNetworkLevels)
{
if (GUILayout.Button(level))
{
Network.RemoveRPCsInGroup(0);
Network.RemoveRPCsInGroup(1);
networkView.RPC( "LoadLevel", RPCMode.AllBuffered, level, lastLevelPrefix + 1);
}
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.EndArea();
}
}
[RPC]
IEnumerator LoadLevel (string level, int levelPrefix)
{
lastLevelPrefix = levelPrefix;
// There is no reason to send any more data over the network on the default channel,
// because we are about to load the level, thus all those objects will get deleted anyway
Network.SetSendingEnabled(0, false);
// We need to stop receiving because first the level must be loaded first.
// Once the level is loaded, rpc's and other state update attached to objects in the level are allowed to fire
Network.isMessageQueueRunning = false;
// All network views loaded from a level will get a prefix into their NetworkViewID.
// This will prevent old updates from clients leaking into a newly created scene.
Network.SetLevelPrefix(levelPrefix);
Application.LoadLevel(level);
yield return;
// Allow receiving data again
Network.isMessageQueueRunning = true;
// Now the level has been loaded and we can start sending out data to clients
Network.SetSendingEnabled(0, true);
var gameObjects = FindObjectsOfType(GameObject) as GameObject[];
foreach (var go in gameObjects)
go.SendMessage("OnNetworkLoadedLevel", SendMessageOptions.DontRequireReceiver);
}
void OnDisconnectedFromServer ()
{
Application.LoadLevel(disconnectedLevel);
}
}
Re: [RESOLVIDO]Mudar de scene multiplayer?
- Código:
using UnityEngine;
using UnityEngine.Network;
using System.Collections;
using UnityEngine.Networking;
using System.Collections.Generic;
[RequireComponent(NetworkView)]
public class LevelMananger : MonoBehaviour {
string[] supportedNetworkLevels = new[]{ "mylevel" };
string disconnectedLevel = "loader";
int lastLevelPrefix = 0;
NetworkView networkView;
void Awake ()
{
// Network level loading is done in a separate channel.
DontDestroyOnLoad(this);
networkView = new NetworkView ();
networkView.group = 1;
Application.LoadLevel(disconnectedLevel);
}
void OnGUI ()
{
if (Network.peerType != NetworkPeerType.Disconnected)
{
GUILayout.BeginArea(Rect(0, Screen.height - 30, Screen.width, 30));
GUILayout.BeginHorizontal();
foreach (var level in supportedNetworkLevels)
{
if (GUILayout.Button(level))
{
Network.RemoveRPCsInGroup(0);
Network.RemoveRPCsInGroup(1);
networkView.RPC( "LoadLevel", RPCMode.AllBuffered, level, lastLevelPrefix + 1);
}
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.EndArea();
}
}
[RPC]
IEnumerator LoadLevel (string level, int levelPrefix)
{
lastLevelPrefix = levelPrefix;
// There is no reason to send any more data over the network on the default channel,
// because we are about to load the level, thus all those objects will get deleted anyway
Network.SetSendingEnabled(0, false);
// We need to stop receiving because first the level must be loaded first.
// Once the level is loaded, rpc's and other state update attached to objects in the level are allowed to fire
Network.isMessageQueueRunning = false;
// All network views loaded from a level will get a prefix into their NetworkViewID.
// This will prevent old updates from clients leaking into a newly created scene.
Network.SetLevelPrefix(levelPrefix);
Application.LoadLevel(level);
yield return null;
// Allow receiving data again
Network.isMessageQueueRunning = true;
// Now the level has been loaded and we can start sending out data to clients
Network.SetSendingEnabled(0, true);
var gameObjects = FindObjectsOfType(GameObject) as GameObject[];
foreach (var go in gameObjects)
go.SendMessage("OnNetworkLoadedLevel", SendMessageOptions.DontRequireReceiver);
}
void OnDisconnectedFromServer ()
{
Application.LoadLevel(disconnectedLevel);
}
}
Sugiro trocar esses Aplication.LoadLevel() por SceneManager.LoadScene();
inportando a biblioteca
- Código:
using UnityEngine.SceneManagement;
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
Agora mostra esse da linha 2
- Código:
Assets/Scripts/LevelMananger.cs(2,5): error CS0138: A `using' directive can only be applied to namespaces but `UnityEngine.Network' denotes a type. Consider using a `using static' instead
Re: [RESOLVIDO]Mudar de scene multiplayer?
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using System.Collections.Generic;
[RequireComponent(NetworkView)]
public class LevelMananger : MonoBehaviour {
string[] supportedNetworkLevels = new[]{ "mylevel" };
string disconnectedLevel = "loader";
int lastLevelPrefix = 0;
NetworkView networkView;
void Awake ()
{
// Network level loading is done in a separate channel.
DontDestroyOnLoad(this);
networkView = new NetworkView ();
networkView.group = 1;
Application.LoadLevel(disconnectedLevel);
}
void OnGUI ()
{
if (Network.peerType != NetworkPeerType.Disconnected)
{
GUILayout.BeginArea(Rect(0, Screen.height - 30, Screen.width, 30));
GUILayout.BeginHorizontal();
foreach (var level in supportedNetworkLevels)
{
if (GUILayout.Button(level))
{
Network.RemoveRPCsInGroup(0);
Network.RemoveRPCsInGroup(1);
networkView.RPC( "LoadLevel", RPCMode.AllBuffered, level, lastLevelPrefix + 1);
}
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.EndArea();
}
}
[RPC]
IEnumerator LoadLevel (string level, int levelPrefix)
{
lastLevelPrefix = levelPrefix;
// There is no reason to send any more data over the network on the default channel,
// because we are about to load the level, thus all those objects will get deleted anyway
Network.SetSendingEnabled(0, false);
// We need to stop receiving because first the level must be loaded first.
// Once the level is loaded, rpc's and other state update attached to objects in the level are allowed to fire
Network.isMessageQueueRunning = false;
// All network views loaded from a level will get a prefix into their NetworkViewID.
// This will prevent old updates from clients leaking into a newly created scene.
Network.SetLevelPrefix(levelPrefix);
Application.LoadLevel(level);
yield return null;
// Allow receiving data again
Network.isMessageQueueRunning = true;
// Now the level has been loaded and we can start sending out data to clients
Network.SetSendingEnabled(0, true);
var gameObjects = FindObjectsOfType(GameObject) as GameObject[];
foreach (var go in gameObjects)
go.SendMessage("OnNetworkLoadedLevel", SendMessageOptions.DontRequireReceiver);
}
void OnDisconnectedFromServer ()
{
Application.LoadLevel(disconnectedLevel);
}
}
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
- Código:
//A using UnityEngine.Network Não existe
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
So que algumas partes do script colocaram ele tenho que mudar.
Re: [RESOLVIDO]Mudar de scene multiplayer?
importa a NetworkBehaviour no lugar do MonoBehaviour
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
Apareceu 5 erros
- Código:
Assets/Scripts/LevelMananger.cs(6,19): error CS0118: `UnityEngine.NetworkView' is a `type' but a `variable' was expected
Assets/Scripts/LevelMananger.cs(6,19): error CS0119: Expression denotes a `type', where a `variable', `value' or `method group' was expected
Assets/Scripts/LevelMananger.cs(25,33): error CS0119: Expression denotes a `type', where a `variable', `value' or `method group' was expected
Assets/Scripts/LevelMananger.cs(65,45): error CS0118: `UnityEngine.GameObject' is a `type' but a `variable' was expected
Assets/Scripts/LevelMananger.cs(65,45): error CS0119: Expression denotes a `type', where a `variable', `value' or `method group' was expected
Re: [RESOLVIDO]Mudar de scene multiplayer?
Os erros acontecem, pois o NetworkView é do antigo sistema de network e a classe NetworkBehaviour e NetworkManager faz pate do Unet, sistema novo... NetworkView foi substituído pelo NetoworkIdentity, que faz o mesmo papel de identificação na cena para cada objeto spawnado... Tente converter para o novo Unet, ou terá que utilizar outro code.
Re: [RESOLVIDO]Mudar de scene multiplayer?
Eu editei ficou assim mais esta dando erro na linha 11
Coloquei tambem NetworkBehaviour e NetworkManager no logar de MonoBehaviour mais na mesma.
Coloquei tambem NetworkBehaviour e NetworkManager no logar de MonoBehaviour mais na mesma.
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using System.Collections.Generic;
[RequireComponent(NetoworkIdentity)]
public class LevelMananger : MonoBehaviour {
string[] supportedNetworkLevels = new[]{ "mylevel" };
string disconnectedLevel = "loader";
int lastLevelPrefix = 0;
NetoworkIdentity netoworkIdentity;
void Awake ()
{
// Network level loading is done in a separate channel.
DontDestroyOnLoad(this);
netoworkIdentity = new NetoworkIdentity ();
netoworkIdentity.group = 1;
Application.LoadLevel(disconnectedLevel);
}
void OnGUI ()
{
if (Networking.peerType != NetworkPeerType.Disconnected)
{
GUILayout.BeginArea(Rect(0, Screen.height - 30, Screen.width, 30));
GUILayout.BeginHorizontal();
foreach (var level in supportedNetworkLevels)
{
if (GUILayout.Button(level))
{
Networking.RemoveRPCsInGroup(0);
Networking.RemoveRPCsInGroup(1);
networkView.RPC( "LoadLevel", RPCMode.AllBuffered, level, lastLevelPrefix + 1);
}
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.EndArea();
}
}
[RPC]
IEnumerator LoadLevel (string level, int levelPrefix)
{
lastLevelPrefix = levelPrefix;
// There is no reason to send any more data over the network on the default channel,
// because we are about to load the level, thus all those objects will get deleted anyway
Networking.SetSendingEnabled(0, false);
// We need to stop receiving because first the level must be loaded first.
// Once the level is loaded, rpc's and other state update attached to objects in the level are allowed to fire
Networking.isMessageQueueRunning = false;
// All network views loaded from a level will get a prefix into their NetworkViewID.
// This will prevent old updates from clients leaking into a newly created scene.
Networking.SetLevelPrefix(levelPrefix);
Application.LoadLevel(level);
yield return null;
// Allow receiving data again
Networking.isMessageQueueRunning = true;
// Now the level has been loaded and we can start sending out data to clients
Networking.SetSendingEnabled(0, true);
var gameObjects = FindObjectsOfType(GameObject) as GameObject[];
foreach (var go in gameObjects)
go.SendMessage("OnNetworkLoadedLevel", SendMessageOptions.DontRequireReceiver);
}
void OnDisconnectedFromServer ()
{
Application.LoadLevel(disconnectedLevel);
}
}
- Código:
Assets/Scripts/LevelMananger.cs(11,5): error CS0246: The type or namespace name `NetoworkIdentity' could not be found. Are you missing an assembly reference?
Re: [RESOLVIDO]Mudar de scene multiplayer?
Está escrito "Ne'to'workIdentity", não "Ne't'workIdentity"... E eu acho que como é diferente a api, esse código teria que ser refeito, talvez...Callyde Jr escreveu:Eu editei ficou assim mais esta dando erro na linha 11
Coloquei tambem NetworkBehaviour e NetworkManager no logar de MonoBehaviour mais na mesma.
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using System.Collections.Generic;
[RequireComponent(NetoworkIdentity)]
public class LevelMananger : MonoBehaviour {
string[] supportedNetworkLevels = new[]{ "mylevel" };
string disconnectedLevel = "loader";
int lastLevelPrefix = 0;
NetoworkIdentity netoworkIdentity;
void Awake ()
{
// Network level loading is done in a separate channel.
DontDestroyOnLoad(this);
netoworkIdentity = new NetoworkIdentity ();
netoworkIdentity.group = 1;
Application.LoadLevel(disconnectedLevel);
}
void OnGUI ()
{
if (Networking.peerType != NetworkPeerType.Disconnected)
{
GUILayout.BeginArea(Rect(0, Screen.height - 30, Screen.width, 30));
GUILayout.BeginHorizontal();
foreach (var level in supportedNetworkLevels)
{
if (GUILayout.Button(level))
{
Networking.RemoveRPCsInGroup(0);
Networking.RemoveRPCsInGroup(1);
networkView.RPC( "LoadLevel", RPCMode.AllBuffered, level, lastLevelPrefix + 1);
}
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.EndArea();
}
}
[RPC]
IEnumerator LoadLevel (string level, int levelPrefix)
{
lastLevelPrefix = levelPrefix;
// There is no reason to send any more data over the network on the default channel,
// because we are about to load the level, thus all those objects will get deleted anyway
Networking.SetSendingEnabled(0, false);
// We need to stop receiving because first the level must be loaded first.
// Once the level is loaded, rpc's and other state update attached to objects in the level are allowed to fire
Networking.isMessageQueueRunning = false;
// All network views loaded from a level will get a prefix into their NetworkViewID.
// This will prevent old updates from clients leaking into a newly created scene.
Networking.SetLevelPrefix(levelPrefix);
Application.LoadLevel(level);
yield return null;
// Allow receiving data again
Networking.isMessageQueueRunning = true;
// Now the level has been loaded and we can start sending out data to clients
Networking.SetSendingEnabled(0, true);
var gameObjects = FindObjectsOfType(GameObject) as GameObject[];
foreach (var go in gameObjects)
go.SendMessage("OnNetworkLoadedLevel", SendMessageOptions.DontRequireReceiver);
}
void OnDisconnectedFromServer ()
{
Application.LoadLevel(disconnectedLevel);
}
}
- Código:
Assets/Scripts/LevelMananger.cs(11,5): error CS0246: The type or namespace name `NetoworkIdentity' could not be found. Are you missing an assembly reference?
Re: [RESOLVIDO]Mudar de scene multiplayer?
Everdade disisto dele agora apareceu 15 erros so refazendo todo ele.
Re: [RESOLVIDO]Mudar de scene multiplayer?
Poste aqui os erros;
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using System.Collections.Generic;
[RequireComponent(NetworkIdentity)]
public class LevelMananger : NetworkBehaviour {
string[] supportedNetworkLevels = new[]{ "mylevel" };
string disconnectedLevel = "loader";
int lastLevelPrefix = 0;
NetworkIdentity netoworkIdentity;
void Awake ()
{
DontDestroyOnLoad(this);
netoworkIdentity = new NetworkIdentity ();
netoworkIdentity.group = 1;
Application.LoadLevel(disconnectedLevel);
}
void OnGUI ()
{
if (Networking.peerType != NetworkPeerType.Disconnected)
{
GUILayout.BeginArea(Rect(0, Screen.height - 30, Screen.width, 30));
GUILayout.BeginHorizontal();
foreach (var level in supportedNetworkLevels)
{
if (GUILayout.Button(level))
{
Networking.RemoveRPCsInGroup(0);
Networking.RemoveRPCsInGroup(1);
networkView.RPC( "LoadLevel", RPCMode.AllBuffered, level, lastLevelPrefix + 1);
}
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.EndArea();
}
}
[RPC]
IEnumerator LoadLevel (string level, int levelPrefix)
{
lastLevelPrefix = levelPrefix;
Networking.SetSendingEnabled(0, false);
Networking.isMessageQueueRunning =
Networking.SetLevelPrefix(levelPrefix);
Application.LoadLevel(level);
yield return null;
Networking.isMessageQueueRunning = true;
Networking.SetSendingEnabled(0, true);
var gameObjects = FindObjectsOfType(GameObject) as GameObject[];
foreach (var go in gameObjects)
go.SendMessage("OnNetworkLoadedLevel", SendMessageOptions.DontRequireReceiver);
}
void OnDisconnectedFromServer ()
{
Application.LoadLevel(disconnectedLevel);
}
}
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
Os erros sao esses agora
- Código:
Assets/Scripts/LevelMananger.cs(57,13): error CS0103: The name `Networking' does not exist in the current context
Assets/Scripts/LevelMananger.cs(59,13): error CS0103: The name `Networking' does not exist in the current context
Assets/Scripts/LevelMananger.cs(60,49): error CS0118: `UnityEngine.GameObject' is a `type' but a `variable' was expected
Assets/Scripts/LevelMananger.cs(60,49): error CS0119: Expression denotes a `type', where a `variable', `value' or `method group' was expected
Re: [RESOLVIDO]Mudar de scene multiplayer?
Tem como eu fazer uma LISTA de servidores aparecer na tela?
Se sim, poderia me passar algum link pra mim estudar ou me falar sobre o que devo pesquisar?
Se sim, poderia me passar algum link pra mim estudar ou me falar sobre o que devo pesquisar?
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
Obrigado voces tem ajudando muito,
Eu vim no forum da unity sobre esse assunto EX: um jogo multiplayer geralmente tem 2 scene, uma online e outra offline, minha duvida era adicionar mais scene tipo EX: SceneOffline,SceneOnline(escolha de personagens) ,SceneMapa1,SceneMapa2 etc...
Tipo uma continuando
Eu vim no forum da unity sobre esse assunto EX: um jogo multiplayer geralmente tem 2 scene, uma online e outra offline, minha duvida era adicionar mais scene tipo EX: SceneOffline,SceneOnline(escolha de personagens) ,SceneMapa1,SceneMapa2 etc...
Tipo uma continuando
Re: [RESOLVIDO]Mudar de scene multiplayer?
De um modo mais fácil de explicar... O quente de se criar um servidor, é:
Um socket server, para ser o Master Server, que o cliente conecta na inicialização e tem informações de logins, players, salas, entre outros... Quando tu cria essa conexão, o resto é fácil... Pois é só na base de troca de mensagens, você manda uma mensagem pra esse socket, que processa e lhe manda de volta. Caso queira uma lista de salas, tu cria um sistema no servidor para criação de salas, que quando cliente tu envia uma mensagem o retorna com informações de salas... Para ter essa flexibilidade de tanto na criação de salas e nas mudanças de cena, com o MasterServer, você cria um sistema de game servers, que abre vários "servidores" de mesmo ip com diferenças nas portas, um com cada tipo de cena ou a sala criada... O conceito básico é esse, quando mandado a informação de criar a sala, ele abre um game server que seria um cliente Unity, com um command line ou algo do tipo e inicia como apenas server e manda as infos para o cliente, que conecta com o ip e porta fornecidos...
Para isso sugiro que deem umas lidas em socket servers, o sistema LLAPI e troca de informações entre cliente e servidor...
Um socket server, para ser o Master Server, que o cliente conecta na inicialização e tem informações de logins, players, salas, entre outros... Quando tu cria essa conexão, o resto é fácil... Pois é só na base de troca de mensagens, você manda uma mensagem pra esse socket, que processa e lhe manda de volta. Caso queira uma lista de salas, tu cria um sistema no servidor para criação de salas, que quando cliente tu envia uma mensagem o retorna com informações de salas... Para ter essa flexibilidade de tanto na criação de salas e nas mudanças de cena, com o MasterServer, você cria um sistema de game servers, que abre vários "servidores" de mesmo ip com diferenças nas portas, um com cada tipo de cena ou a sala criada... O conceito básico é esse, quando mandado a informação de criar a sala, ele abre um game server que seria um cliente Unity, com um command line ou algo do tipo e inicia como apenas server e manda as infos para o cliente, que conecta com o ip e porta fornecidos...
Para isso sugiro que deem umas lidas em socket servers, o sistema LLAPI e troca de informações entre cliente e servidor...
Re: [RESOLVIDO]Mudar de scene multiplayer?
Entendi agora; VLWs
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
Boa tarde amigos pesquizei esse assunto e me deparei com esses 2 script um servidor e o cliente nao textei ainda mais vou mostra a voces para ver uma boa ideia de como usar-los mais tarde vou texta-los.
- Código:
using System.Collections;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using UnityEngine;
using UnityEngine.Networking;
public class NetworkServer : MonoBehaviour {
public int port = 8000;
private HostTopology topology;
private ConnectionConfig config;
private int connectionId;
private int hostId;
void Start() {
NetworkTransport.Init();
config = new ConnectionConfig();
config.AddChannel(QosType.ReliableSequenced);
topology = new HostTopology(config, 10);
hostId = NetworkTransport.AddHost(topology, port);
Debug.Log("Server started on port" + port + " with id of " + hostId);
}
void Update() {
int recHostId;
int recConnectionId;
int recChannelId;
byte[] recBuffer = new byte[1024];
int bufferSize = 1024;
int dataSize;
byte error;
NetworkEventType networkEvent = NetworkTransport.Receive(out recHostId, out recConnectionId, out recChannelId, recBuffer, bufferSize, out dataSize, out error);
NetworkError networkError = (NetworkError) error;
if (networkError != NetworkError.Ok) {
Debug.LogError(string.Format("Error recieving event: {0} with recHostId: {1}, recConnectionId: {2}, recChannelId: {3}", networkError, recHostId, recConnectionId, recChannelId));
}
switch (networkEvent) {
case NetworkEventType.Nothing:
break;
case NetworkEventType.ConnectEvent:
Debug.Log(string.Format("incoming connection event received with connectionId: {0}, recHostId: {1}, recChannelId: {2}", recConnectionId, recHostId, recChannelId));
break;
case NetworkEventType.DataEvent:
Stream stream = new MemoryStream(recBuffer);
BinaryFormatter formatter = new BinaryFormatter();
string message = formatter.Deserialize(stream) as string;
Debug.Log("incoming message event received: " + message);
break;
case NetworkEventType.DisconnectEvent:
Debug.Log("remote client " + recConnectionId + " disconnected");
break;
}
}
}
- Código:
using System.Collections;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
public class NetworkClient : MonoBehaviour {
public string host = "127.0.0.1";
public int port = 8000;
private int hostId;
private int connectionId;
private ConnectionConfig config;
private HostTopology hostTopology;
private byte channelId;
void Start() {
NetworkTransport.Init();
}
public void Connect() {
byte error;
config = new ConnectionConfig();
channelId = config.AddChannel(QosType.ReliableSequenced);
hostTopology = new HostTopology(config, 1);
hostId = NetworkTransport.AddHost(hostTopology, port);
connectionId = NetworkTransport.Connect(hostId, host, port, 0, out error);
NetworkError networkError = (NetworkError) error;
if (networkError != NetworkError.Ok) {
Debug.LogError(string.Format("Unable to connect to {0}:{1}, Error: {2}", host, port, networkError));
} else {
Debug.Log(string.Format("Connected to {0}:{1} with hostId: {2}, connectionId: {3}, channelId: {4},", host, port, hostId, connectionId, channelId));
}
}
public void SendSocketMessage() {
byte error;
byte[] buffer = new byte[1024];
Stream stream = new MemoryStream(buffer);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, "Hello");
int bufferSize = 1024;
NetworkTransport.Send(hostId, connectionId, channelId, buffer, bufferSize, out error);
NetworkError networkError = (NetworkError) error;
if (networkError != NetworkError.Ok) {
Debug.LogError(string.Format("Error: {0}, hostId: {1}, connectionId: {2}, channelId: {3}", networkError, hostId, connectionId, channelId));
} else {
Debug.Log("Message sent!");
}
}
}
Re: [RESOLVIDO]Mudar de scene multiplayer?
Boaa! Basicamente isso... Tem um pequeno exemplo de mensagens também, já é um ótimo começo... E qualquer coisa também, posso ajuda-los.
Re: [RESOLVIDO]Mudar de scene multiplayer?
Pelo que entedi o servidor e o cliente sao separado,
Mais quando chamar outra scene nao vao os 2 juntos ?
E isso mesmo?
Mais quando chamar outra scene nao vao os 2 juntos ?
E isso mesmo?
Re: [RESOLVIDO]Mudar de scene multiplayer?
É que assim... Segue a lógica. O NetworkManager(Ou outro manager da conexão) funciona para controle daquela cena, por isso se caso tu queira trocar de cena no host, ele muda em todos. Para que cada cena sejam independentes, teria que criar um host para cada cena e interliga-los... Mas assim talvez não seja tão otimizado, mas pelo que sei é a única maneira de administrar. Sistemas de salas entre outros são assim, um game server que abre para cada tipo. Uma outra forma seria juntar tudo em uma cena e apenas "teleporta-lo", mas dependendo do tamanho da cena ficaria ultra pesado. Pelo que sei essas são as maneiras para trocar de cena ou algo do tipo.
Re: [RESOLVIDO]Mudar de scene multiplayer?
Como eu posso fazer um host para cada cena e interliga-los?
Seria um host geral ligado a outros ?
Seria um host geral ligado a outros ?
Re: [RESOLVIDO]Mudar de scene multiplayer?
Não seu se seria assim mas minha teoria é essa:
haveria um server individual para cada cena e quando o player for mudar de cena, simples conectaria nesse outro servidor que ficaria na outra cens;
haveria um server individual para cada cena e quando o player for mudar de cena, simples conectaria nesse outro servidor que ficaria na outra cens;
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: [RESOLVIDO]Mudar de scene multiplayer?
Basicamente isso... Você mandaria mensagens para o master server(que tu ficaria conectado sempre) e ele migraria entre as cenas... E para mim, a não ser que seja muiito grande, ou uma plataforma mais modesta, alguns mapas podem estar na mesma cena para mais otimização e estabilidade.
Uma pequena introdução:
O MasterServer(Servidor principal) que você é sempre conectado e ao mesmo tempo, exista outros servidores que cada um contenha a cena... Conforme você for trocar de cena, você desconecta de um, mantem o player, conecta no outro host e spawna na localização... É basicamente isso. E em caso de criação de salas também, é quase o mesmo, só que o MasterServer seria encarregado de spawnar um host, toda vez que criasse uma sala e dessa forma, conectasse os players e pronto.
Uma pequena introdução:
O MasterServer(Servidor principal) que você é sempre conectado e ao mesmo tempo, exista outros servidores que cada um contenha a cena... Conforme você for trocar de cena, você desconecta de um, mantem o player, conecta no outro host e spawna na localização... É basicamente isso. E em caso de criação de salas também, é quase o mesmo, só que o MasterServer seria encarregado de spawnar um host, toda vez que criasse uma sala e dessa forma, conectasse os players e pronto.
Re: [RESOLVIDO]Mudar de scene multiplayer?
Bom eu estou usando esse script como servidor principal onde ele voce escolhe personagens
Com buttoes UI tiramos o Text dos buttoes e colocando spriter com fotos nos buttoes
O script ficou como se fosse um segundo servidor minhas ideias para poder ligalos imaginei em colocar uma bool para ativa-lo e desativa-lo voce podem me dar uma ideia?
Com buttoes UI tiramos o Text dos buttoes e colocando spriter com fotos nos buttoes
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using UnityEngine.Networking.NetworkSystem;
public class myNetworkManager : NetworkManager {
public Button player1Button;
public Button player2Button;
public Button player3Button;
int avatarIndex = 0;
public static myNetworkManager mynetworkManager;
//public Canvas characterSelectionCanvas;
// Use this for initialization
void Start () {
player1Button.onClick.AddListener (delegate {AvatarPicker (player1Button.name);});
player2Button.onClick.AddListener (delegate {AvatarPicker (player2Button.name);});
player3Button.onClick.AddListener (delegate {AvatarPicker (player3Button.name);});
}
void AvatarPicker(string buttonName)
{
switch (buttonName)
{
case "Player1":
avatarIndex = 0;
break;
case "Player2":
avatarIndex = 1;
break;
case "Player3":
avatarIndex = 2;
break;
}
playerPrefab = spawnPrefabs[avatarIndex];
}
/// Copied from Unity's original NetworkManager script except where noted
public override void OnClientConnect(NetworkConnection conn)
{
/// ***
/// This is added:
/// First, turn off the canvas...
http://characterSelectionCanvas.enabled = false;
/// Can't directly send an int variable to 'addPlayer()' so you have to use a message service...
IntegerMessage msg = new IntegerMessage(avatarIndex);
/// ***
if (!clientLoadedScene)
{
// Ready/AddPlayer is usually triggered by a scene load completing. if no scene was loaded, then Ready/AddPlayer it here instead.
ClientScene.Ready(conn);
if (autoCreatePlayer)
{
///***
/// This is changed - the original calls a differnet version of addPlayer
/// this calls a version that allows a message to be sent
ClientScene.AddPlayer(conn, 0, msg);
}
}
}
/// Copied from Unity's original NetworkManager 'OnServerAddPlayerInternal' script except where noted
/// Since OnServerAddPlayer calls OnServerAddPlayerInternal and needs to pass the message - just add it all into one.
public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId, NetworkReader extraMessageReader)
{
/// *** additions
/// I skipped all the debug messages...
/// This is added to recieve the message from addPlayer()...
int id = 0;
if (extraMessageReader != null)
{
IntegerMessage i = extraMessageReader.ReadMessage<IntegerMessage>();
id = i.value;
}
/// using the sent message - pick the correct prefab
GameObject playerPrefab = spawnPrefabs[id];
/// *** end of additions
GameObject player;
Transform startPos = GetStartPosition();
if (startPos != null)
{
player = (GameObject)Instantiate(playerPrefab, startPos.position, startPos.rotation);
}
else
{
player = (GameObject)Instantiate(playerPrefab, Vector3.zero, Quaternion.identity);
}
NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);
}
public void OnDisconnectedFromServer ()
{
NetworkManager.singleton.StopHost();
}
}
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using UnityEngine.Networking.NetworkSystem;
public class Plataform1 : NetworkManager {
public static Plataform1 plataform1;
}
O script ficou como se fosse um segundo servidor minhas ideias para poder ligalos imaginei em colocar uma bool para ativa-lo e desativa-lo voce podem me dar uma ideia?
Re: [RESOLVIDO]Mudar de scene multiplayer?
Velho, sinceramente eu não entendi muito bem o que deseja... Como assim o segundo script seria segundo servidor? Servidor do que no caso? Seria para interligar ao primeiro script? Mas o que ele controlaria?
Página 1 de 2 • 1, 2
Tópicos semelhantes
» [RESOLVIDO] Prefab com altura diferente na Scene
» [RESOLVIDO] Rotacionar Prefab dentro da Scene
» [RESOLVIDO] Entrar no If pelo nome da Scene
» [RESOLVIDO] Ajuda Scene Editor
» [RESOLVIDO] Fazer cada Scene em uma orientação
» [RESOLVIDO] Rotacionar Prefab dentro da Scene
» [RESOLVIDO] Entrar no If pelo nome da Scene
» [RESOLVIDO] Ajuda Scene Editor
» [RESOLVIDO] Fazer cada Scene em uma orientação
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 2
Permissões neste sub-fórum
Não podes responder a tópicos