Photon Pun2 - Error: NewScene Clean
3 participantes
Página 1 de 1
Photon Pun2 - Error: NewScene Clean
Olá pessoal,
Eu estou tentando implementar o modo multiplayer em um projeto particular que desenvolvo e, para isso, estou usando Photon.
Está tudo funcionando perfeitamente como deveria funcionar no single player, porém, um erro acontece assim:
1-Eu loguei o primeiro player (Cafe-com-leite) e ficou tudo beleza. Inclusive eu matei um mob com ele.
2-Ao logar o segundo player, lá na tela dele ele surge normal, da mesma forma que o primeiro. Porém ele não vê o primeiro player. Já cá na tela do primeiro player o segundo player aparece duplicado e o jogo fica travado.
Eu penso que algum recurso do Photon dá uma recarregada na scene (vide erro abaixo) e provoca esse colapso.
erro:
NewScene Clean 1003
UnityEngine.Debug:LogError(Object)
Photon.Pun.PhotonNetwork:NewSceneLoaded() (at Assets/Photon/PhotonUnityNetworking/Code/PhotonNetworkPart.cs:1450)
Photon.Pun.<>c:<Start>b__13_0(Scene, LoadSceneMode) (at Assets/Photon/PhotonUnityNetworking/Code/PhotonHandler.cs:128)
UnityEngine.SceneManagement.SceneManager:Internal_SceneLoaded(Scene, LoadSceneMode) (at /home/builduser/buildslave/unity/build/Runtime/Export/SceneManager/SceneManager.cs:244)
Link da foto
Eu estou tentando implementar o modo multiplayer em um projeto particular que desenvolvo e, para isso, estou usando Photon.
Está tudo funcionando perfeitamente como deveria funcionar no single player, porém, um erro acontece assim:
1-Eu loguei o primeiro player (Cafe-com-leite) e ficou tudo beleza. Inclusive eu matei um mob com ele.
2-Ao logar o segundo player, lá na tela dele ele surge normal, da mesma forma que o primeiro. Porém ele não vê o primeiro player. Já cá na tela do primeiro player o segundo player aparece duplicado e o jogo fica travado.
Eu penso que algum recurso do Photon dá uma recarregada na scene (vide erro abaixo) e provoca esse colapso.
erro:
NewScene Clean 1003
UnityEngine.Debug:LogError(Object)
Photon.Pun.PhotonNetwork:NewSceneLoaded() (at Assets/Photon/PhotonUnityNetworking/Code/PhotonNetworkPart.cs:1450)
Photon.Pun.<>c:<Start>b__13_0(Scene, LoadSceneMode) (at Assets/Photon/PhotonUnityNetworking/Code/PhotonHandler.cs:128)
UnityEngine.SceneManagement.SceneManager:Internal_SceneLoaded(Scene, LoadSceneMode) (at /home/builduser/buildslave/unity/build/Runtime/Export/SceneManager/SceneManager.cs:244)
Link da foto
Elizeuvix- Iniciante
- PONTOS : 1664
REPUTAÇÃO : 0
Respeito as regras :
Re: Photon Pun2 - Error: NewScene Clean
Vou ter que começar a estudar Photon2... nunca sei responder dúvidas relacionadas a multiplayer
Re: Photon Pun2 - Error: NewScene Clean
Puts!MarcosSchultz escreveu:Vou ter que começar a estudar Photon2... nunca sei responder dúvidas relacionadas a multiplayer
Eu vim aqui porque tinha quase certeza que você iria resolver meu problema
Elizeuvix- Iniciante
- PONTOS : 1664
REPUTAÇÃO : 0
Respeito as regras :
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Photon Pun2 - Error: NewScene Clean
Eu direciono o objeto player pelo Photon:NKKF escreveu:Como você instancia o jogador? E o carregamento de cenas?
PhotonNetwork.LoadLevel(sceneId);
corePlayer = jogador[id];
e ao abrir a scene, outro script presente lá isntancia o objeto em determinada coordenada
PhotonNetwork.Instantiate(Conn.instance.jogador[Conn.instance.id].name, new Vector3(Random.Range(1,,0.2f, Random.Range(1,), Quaternion.identity, 0);
ps: a variável jogador é public static da script de conexão Conn.cs.
Elizeuvix- Iniciante
- PONTOS : 1664
REPUTAÇÃO : 0
Respeito as regras :
Re: Photon Pun2 - Error: NewScene Clean
O problema em si:
TALVEZ o que esteja acontecendo seja o seguinte:
Ao utilizar o PhotonNetwork.LoadLevel você esteja carregando o nível em todos os clientes, um e dois (não entendo direito essa parte do Photon, sempre preferi carregar as cenas eu mesmo..) mesmo que o jogador um já estivesse com a mesma cena carregada e até mesmo rodando-a.
A partir daí quando o 2° entra na outra cena você chama o Instantiate do PhotonNetwork mais duas vezes (uma no cliente 1 e outra no cliente 2) mas isso dependeria de como você estaria fazendo isso, usando um OnEnable, Start, Awake ou lógica parecida.
Então o jogador um veria três pessoas e o jogador dois, que acabara de entrar, só veria ele mesmo. Já que pelo visto o PhotonNetwork.Instantiate está com problemas de buffer que é o que armazena o que aconteceu no jogo de importante: movimentações, RPC’s, instantiates etc.
Tá mas o que fazer então?
Eu usaria o Scene Management da própria Unity sem envolver o Photon com isso, OU usar o código apresentado no 2° link das referências de solução, me parece mais conveniente..
Em relação ao Photon Instantiate, que está dando certos problemas de buffer você poderia fazer um RPC que lidasse com isso, ele receberia um parâmetro de nome do objeto à ser instanciado e executaria ele com “AllBuffered” para forçar o Photon a armazenar essa informação para que clientes futuros pudessem recuperar essas informações.
Posso ter falado besteira nessa postagem pois minha área não é Multiplayer Photon mas espero ter ajudado em sua pesquisa para resolver esse problema.
Segue os links de referência do problema:
https://forum.photonengine.com/discussion/12055/loadlevel-or-loadlevelasync
https://doc.photonengine.com/en-us/pun/current/demos-and-tutorials/pun-basics-tutorial/gamemanager-levels
Segue os links de referência da solução:
https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.html
https://forum.unity.com/threads/scene-management-with-pun-photon-networking-solved.541726/
TALVEZ o que esteja acontecendo seja o seguinte:
Ao utilizar o PhotonNetwork.LoadLevel você esteja carregando o nível em todos os clientes, um e dois (não entendo direito essa parte do Photon, sempre preferi carregar as cenas eu mesmo..) mesmo que o jogador um já estivesse com a mesma cena carregada e até mesmo rodando-a.
A partir daí quando o 2° entra na outra cena você chama o Instantiate do PhotonNetwork mais duas vezes (uma no cliente 1 e outra no cliente 2) mas isso dependeria de como você estaria fazendo isso, usando um OnEnable, Start, Awake ou lógica parecida.
Então o jogador um veria três pessoas e o jogador dois, que acabara de entrar, só veria ele mesmo. Já que pelo visto o PhotonNetwork.Instantiate está com problemas de buffer que é o que armazena o que aconteceu no jogo de importante: movimentações, RPC’s, instantiates etc.
Tá mas o que fazer então?
Eu usaria o Scene Management da própria Unity sem envolver o Photon com isso, OU usar o código apresentado no 2° link das referências de solução, me parece mais conveniente..
Em relação ao Photon Instantiate, que está dando certos problemas de buffer você poderia fazer um RPC que lidasse com isso, ele receberia um parâmetro de nome do objeto à ser instanciado e executaria ele com “AllBuffered” para forçar o Photon a armazenar essa informação para que clientes futuros pudessem recuperar essas informações.
Posso ter falado besteira nessa postagem pois minha área não é Multiplayer Photon mas espero ter ajudado em sua pesquisa para resolver esse problema.
Segue os links de referência do problema:
https://forum.photonengine.com/discussion/12055/loadlevel-or-loadlevelasync
https://doc.photonengine.com/en-us/pun/current/demos-and-tutorials/pun-basics-tutorial/gamemanager-levels
Segue os links de referência da solução:
https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.html
https://forum.unity.com/threads/scene-management-with-pun-photon-networking-solved.541726/
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Photon Pun2 - Error: NewScene Clean
Não há como instanciar o player usando o SceneManager no modo multiplayer. Tentei de toda forma aqui.
Segue o código que funciona, porém com o bug relatado.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using RPG.Connection;
namespace RPG.Connection
{
public class CriaPlayer : MonoBehaviourPunCallbacks
{
[SerializeField] private Transform[] spawnPoint;
void Start()
{
int i = Random.Range(0, spawnPoint.Length);
GameObject playerTemp = PhotonNetwork.Instantiate(Conn.instance.jogador[Conn.instance.id].name, spawnPoint.position, spawnPoint.rotation, 0) as [i]GameObject;
}
}
}[/i]
Segue o código que funciona, porém com o bug relatado.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using RPG.Connection;
namespace RPG.Connection
{
public class CriaPlayer : MonoBehaviourPunCallbacks
{
[SerializeField] private Transform[] spawnPoint;
void Start()
{
int i = Random.Range(0, spawnPoint.Length);
GameObject playerTemp = PhotonNetwork.Instantiate(Conn.instance.jogador[Conn.instance.id].name, spawnPoint.position, spawnPoint.rotation, 0) as [i]GameObject;
}
}
}[/i]
Elizeuvix- Iniciante
- PONTOS : 1664
REPUTAÇÃO : 0
Respeito as regras :
Re: Photon Pun2 - Error: NewScene Clean
Voltei aqui para dizer que descobri o problema que retornava o erro "NewScene Clean".
Ocorre que, durante um teste, eu declarei a variável tipo PhotonView como public static e esqueci de reverter esta alteração no meu código. Então esta variável ia guardando o PhotonView de cada jogador que ia entrando na sala, anulando a informação anterior, já que o componente sepre seria relacionado ao ultimo player que atualizasse a variável.
Ocorre que, durante um teste, eu declarei a variável tipo PhotonView como public static e esqueci de reverter esta alteração no meu código. Então esta variável ia guardando o PhotonView de cada jogador que ia entrando na sala, anulando a informação anterior, já que o componente sepre seria relacionado ao ultimo player que atualizasse a variável.
Elizeuvix- Iniciante
- PONTOS : 1664
REPUTAÇÃO : 0
Respeito as regras :
Re: Photon Pun2 - Error: NewScene Clean
MarcosSchultz escreveu:Vou ter que começar a estudar Photon2... nunca sei responder dúvidas relacionadas a multiplayer
Depois de tanto tempo, ainda estou com problemas com o Photon
Elizeuvix- Iniciante
- PONTOS : 1664
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» Ajuda ae error CS1525: Unexpected symbol `if' como ajeito esse error no script da lanterna?
» Error ao dar Play!
» error no script
» Error CS0006
» Error No Console
» Error ao dar Play!
» error no script
» Error CS0006
» Error No Console
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos