Jump to content
Unity Insider Forum

[Pun 2] Instantiate Problem


Noxen

Recommended Posts

Hallo Werte Unity Freunde. 

Ich habe ein hoffentlich kleines Problem mit Pun 2. Kurz zur Erklärung: Wenn man spielen möchte, wählt man aus, mit wie vielen man spielen möchte, joint oder created einen Raum, wenn noch keiner existiert. Wenn die Spielerzahl erreicht ist, wechselt der Master ins Level und zieht alle anderen mit (Auto Sync Level ist true). Dann werden direkt die Spieler Instantiated. Im Master sieht man beide Spieler, beide können sich getrennt bewegen, alles passt. Beim Client jedoch erscheint der Master Player 4x. Obwohl Create Player nur einmal aufgerufen wird (im Log geprüft). Kann mir jemand sagen, woran das liegen könnte? Habe das Pun 2 Tutorial als Vorlage benutzt. Im Log erscheint der Client Player als 2001 als created und dann registrierte PhotonView 1001,1002,1003 und 1004. Und ich versteh nicht wieso... 

Vielen Dank schonmal für eure Hilfe. 

Gruß Noxen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was heißt hier denn jetzt Create Player? Ich glaube nicht, dass das was mit PUN zu tun hat, denn da spawnt man Spieler mit PhotonNetwork.Instantiate.

Wäre gut, wenn man ein Code Abschnitt dazu sehe kann, sonst muss man ja nur rumraten. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 38 Minuten schrieb MaZy:

Was heißt hier denn jetzt Create Player? Ich glaube nicht, dass das was mit PUN zu tun hat, denn da spawnt man Spieler mit PhotonNetwork.Instantiate.

Wäre gut, wenn man ein Code Abschnitt dazu sehe kann, sonst muss man ja nur rumraten. 

Stimmt, nicht nachgedacht. Sorry, dann mach es mal ganz ausführlich.

Also, wenn bereits ein Raum existiert, joint er, ansonsten eröffnet er einen neuen. ()

    public override void OnJoinRandomFailed(short returnCode, string message) {
        //base.OnJoinRoomFailed(returnCode, message);
        Debug.Log("Room Join Failed: " + returnCode + " / " + message);
        PhotonNetwork.CreateRoom(null,new RoomOptions { MaxPlayers = 2});
    }

Wenn die Anzahl an Spieler erreicht ist:

    void Update() {
        if (joined) {
            searchStatus.text = "Waiting for Players (" + PhotonNetwork.CurrentRoom.PlayerCount + " / " + PhotonNetwork.CurrentRoom.MaxPlayers + ")";
            if (PhotonNetwork.CurrentRoom.PlayerCount == PhotonNetwork.CurrentRoom.MaxPlayers) {
                if (PhotonNetwork.IsMasterClient) {
                    PhotonNetwork.LoadLevel(1);
                }
            }
        }
    }

Alle Spieler kommen in die Scene. Dann beginnt es mit dem Erstellen:

    void Start() {

        CreatePlayer();

        debug.text = "MyPlayerID: " + PhotonNetwork.LocalPlayer.ActorNumber.ToString();

    }

 

    void CreatePlayer() {
        Debug.Log("Create Player");
        Vector3[] posi = new Vector3[2];
        posi[0] = new Vector3(-45, 0, 0);
        posi[1] = new Vector3(45, 0, 0);

        PhotonNetwork.Instantiate("Player", posi[PhotonNetwork.LocalPlayer.ActorNumber - 1], Quaternion.identity);
}

Das Bild im Anhang, zeigt was der Client macht. 2001 ist quasi der Client, die anderen der Master.

Das bekomme ich, wenn ich den Master als Build laufen lasse und den Client in Unity.

Kurz gefasst, der Master stellt alles richtig da, beim CLient erscheint der Masterplayer 4x. Wenn er diesen jedoch bewegt, bewegt sich nur einer.

 

Ich hoffe, ich konnte einige fragen klären.

 

Gruß Noxen

Anmerkung 2020-04-21 172217.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, habe den Fehler gefunden. Ziehmlich dumm. 

Im Update bereich läd er das Level, wenn Spielerzahl erreicht. Anscheinend geht er mehrmals in LoadLevel und geht 2x-3x wieder in eine neue Szene. Nimmt die erstellten Spieler aber mit. Habe lediglich eine weitere Abfrage hinzugefügt:

    void Update() {
        if (joined && !changed) {
            if (PhotonNetwork.CurrentRoom.PlayerCount == PhotonNetwork.CurrentRoom.MaxPlayers) {
                if (PhotonNetwork.IsMasterClient) {
                    PhotonNetwork.LoadLevel(1);
                    changed = true;
                    Debug.Log("Change Scene");
                }
            }
        }
    }

Und somit ist das Problem gelöst!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...