Singular Geschrieben 17. September 2022 Melden Share Geschrieben 17. September 2022 Hallo zusammen, ich arbeite mich gerade in das Thema Multyplayer ein und arbeite mit Photon (PUN2). Thema ist gerade, dass ich zwei Spieler auf einem Server habe von denen einer der Host ist und der andere Soll gekicked werden können vom Host. Das Funktioniert auch so weit. Allerding möchte ich, dass der gekickte Spieler eine Info bekommt, dass er gegicked wurde. Ich habe da eine [PunRPC] Methode gedacht, die der Host bei dem Spieler auslöst, damit bei ihm der Text angezeigt wird. Jetzt weiß ich allerdings nicht wie ich genau an diese Methode heran komme. PunRPC ist mir noch zu neu. Oder gibt es vielleicht einen Callback der aufgerufen wird, wenn der Spieler gekicked wurd. "OnPlayerKicked" oder so? Danke im Voraus. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MaZy Geschrieben 17. September 2022 Melden Share Geschrieben 17. September 2022 Soweit ich weiß gibt es dafür kein Event mit Messages. Vielleicht gibt es ein Event, dass er aber keine Verbindung mehr hat oder aus dem Raum raus ist. Was du dann machen kannst ist, dass du bevor ein Spieler kickst bei ihm eine Nachricht zuweist. Das würde mit PunRPC gehen. Simple würde ich einfach eine Klasse mit static Variablen nehmen und dann diese Variable nachdem kick anzeigen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Singular Geschrieben 17. September 2022 Autor Melden Share Geschrieben 17. September 2022 okay dann mache ich das über PunRPC. Danke dir. Wie komme ich denn an ein Object von dem Spieler heran? Das Objekt in dem die Nachricht angezeigt wird ist meine class Infobox. Die habe ich selber geschrieben. Der habe ich jetzt ein [PunRPC] verpasst. Heißt ich müsste jetzt von dem Spieler der gekickt werden soll an seine Infobox herankommen... aber wie am besten? Player.Infobox oder Player.GetComponent<Infobox>() geht leider nicht. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MaZy Geschrieben 18. September 2022 Melden Share Geschrieben 18. September 2022 Wenn du mit Player Object den von Photon meinst geht das nicht so oder ist die Player Klasse von dir selber geschrieben und ist ein Component? Wenn je dann einfach ein Verweis bzw Variable erstellen Z.B. public class Player { public InfoBox infoBox; } Aber das sind doch basics von C# oder meinst du was anderes? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Singular Geschrieben 20. September 2022 Autor Melden Share Geschrieben 20. September 2022 Die Player Klasse habe ich nicht selber geschrieben, die ist von Photon. Das was du geschriben hast sind Basics ja, aber ich möchte das Spieler 1 (Host), Spieler 2 (Client) kicken kann. Dazu bekommt Spieler 1 einen Button angezeigt, worüber er Spieler 2 Kicken kann. Funktioniert auch alles wunderbar. Spieler 2 Landet dann wieder im Hauptmenü. Wenn das allerdings so passiert, würde man denken können, dass es da einen Programmfehler war. Heißt Spieler 2 soll angezeigt bekommen, dass er vom Host gekicked wurde. Das soll über die InfoBox passieren (die Klasse habe ich geschrieben) Wie kann jetzt also Spieler 1 beim Kick eine Mitteilung an die Infobox von Spieler 2 senden? Der Host hat ja nicht die Infobox vom Client sondern nur seine eigene. Theoretisch brauche ich also eine art "kickedPlayer.GetComponent<InfoBox>().SendMessage("You have been kicked");" Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MaZy Geschrieben 23. September 2022 Melden Share Geschrieben 23. September 2022 Also wenn du z.B. sowas ähnliches hast so könntest du machen: // Das beim Spieler script ausführen void KickPlayer(PhotonView playerView) { // Überprüfen ob es der MasterClient ist (also den Room erstellt hat - auch "host" oft genannt (was aber falsch ist) ). // Wenn nicht, dann abbrechen if(!PhotonNetwork.IsMasterClient) return; // Setze die Nachricht InfoBox infoBox = playerView.GetComponent<InfoBox>(); infoBox.SetMessage("You have been kicked out from the room/server"); // ODER InfoBox.SetMessage("You have been kicked out from the room/server"); // Das kann nur der Masterclient.. braucht man nicht überprüfen. PhotonNetwork.CloseConnection(playerView.Owner) } Dein InfoBox müsste dann natürlich die Funktion SetMessage haben. player.GetComponent<InfoBox>() das hier kann eigentlich nicht funktioniert, weil wenn man aus dem rausgeschmissen wird, dann werden auch Spieler objekte gelöscht und somit kannst du nicht es nicht anzeigen. Daran hab ich erst nicht gedacht. Deswegen würde ich InfoBox als static Klasse machen und einfach direkt den Text setzen und im Hauptmenü dann diesen Text anzeigen. Gibt aber noch komplizierteren Weg und den finde ich auch richtiger. Müsstest dafür PhotonNetwork.RaiseEvent und in irgendein Script OnEvent verwenden. Dazu unbedingt das hier lesen: https://doc.photonengine.com/en-us/pun/current/gameplay/rpcsandraiseevent#raiseevent. Da wird mit einem Beispiel gezeigt. Mich hat das selber interessiert und hab mal den Code analysiert und nachgelesen und es gibt keine KICK Funktion allgemein in Photon. Was im Hintergrund passiert ist eigentlich du sendest ein Spieler sowas wie "Kannst du aus dem Raum gehen" also Forderung natürlich und der Client sagt dann "ok" und führt PhotonNetwork.LeaveRoom(false). Also theoretisch verlässt man selbst den Raum. Deswegen mit Event kann man also seine eigene Kickevent schreiben und auch die Nachricht anzeigen. Gibt halt verschiedene Möglichkeiten. Das oben das Beispiel mit InforBox und statische Funktion usw ist glaub am leichtesten Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Singular Geschrieben 24. September 2022 Autor Melden Share Geschrieben 24. September 2022 Ah, okay. Das muss ich mir mal anschauen. Ich habe jetzt einen recht unschönen Weg gewählt, dass Spieler, die den Raum betreten ihre Infobox an den Master weiter geben. Und wenn der ihn kickt, kann er darauf zugreifen. Das läuft aber auf dem selben Weg, dass der Spieler "freiwillig" den Raum verlässt. 😃 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.