Alexfedel Geschrieben 9. November 2017 Melden Share Geschrieben 9. November 2017 Ich erzeuge ein Objekt mit der Funktion "NetworkServer.SpawnWithClientAuthority". Wie bekomme ich jetzt Zugriff auf dieses GameObject vom Client aus, der die Autorität besitzt? Bei meinem Client wird die Funktion "OnStartAuthority" ausgeführt, aber leider hat diese Unity Funktion keine Parameter, die das GameObject, welches gerade gespawnt wurde, enthält. Ich möchte nicht über GameObject.Find einfach nach dem Namen suchen, weil es zum einen nicht schön ist, zum anderen kann es sein, dass der Name mehrmals vorkommt. Weiß jemand, ob es da eine einfache Möglichkeit gibt? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Helishcoffe Geschrieben 10. November 2017 Melden Share Geschrieben 10. November 2017 Du kannst im Objekt selbst in der Start Methode abfragen ob "hasAuthority" true ist. Dann fängst du auf dem Objekt selbst praktisch das Object ab. Alternative wäre, eine ClientRpc-Methode zu schreiben, die das NetworkIdentity deines auf dem Server gespawnten Objektes übergibt. Somit sendest du parallel das Objekt hinterher. Beide Ansätze machen das gleiche, gehen nur anders an die Situation ran Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Alexfedel Geschrieben 13. November 2017 Autor Melden Share Geschrieben 13. November 2017 Danke, ich habe es jetzt mit der "hasAuthority" Abfrage hinbekommen. Ich finde es trotzdem nicht optimal von Unity, dass ein Client nicht direkt eine Liste besitzt von Objekten in der Szene, dessen Besitzer er ist. Umgekehrt hat ein NetworkIdentity-Objekt auch keine Variable, die direkt auf das Client-Player-GameObject in der Szene verweist. NetworkIdentity.clientAuthorityOwner liefert beispielsweise kein GameObject, sondern nur eine NetworkConnection, von der aus ich nicht auf das Client-Player-GameObject schließen kann. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Helishcoffe Geschrieben 15. November 2017 Melden Share Geschrieben 15. November 2017 Das NetworkIdentity Objekt ist ja ein Component welches auf diesem Object liegt. Du kannst also von dem NetworkIdentity.GetComponent<Transform>() direkt gebrauch machen und würdest dann z.B. die Transform Komponente bekommen. (Habe es grade nicht ausprobiert ob das so direkt geht, wüsste jetzt aber nicht im Moment warum es nicht gehen sollte). Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MaZy Geschrieben 16. November 2017 Melden Share Geschrieben 16. November 2017 Am 13.11.2017 um 15:29 schrieb Alexfedel: Danke, ich habe es jetzt mit der "hasAuthority" Abfrage hinbekommen. Ich finde es trotzdem nicht optimal von Unity, dass ein Client nicht direkt eine Liste besitzt von Objekten in der Szene, dessen Besitzer er ist. Umgekehrt hat ein NetworkIdentity-Objekt auch keine Variable, die direkt auf das Client-Player-GameObject in der Szene verweist. NetworkIdentity.clientAuthorityOwner liefert beispielsweise kein GameObject, sondern nur eine NetworkConnection, von der aus ich nicht auf das Client-Player-GameObject schließen kann. Da es MonoBehaviour ist kannst du daher networkIdentify.gameObject oder .transform machen. Somit hast du den GameObject. Und ein Client kennt eigentlich seine GameObjects. Du hast aber meist nur über NetworkIdentify versucht und hast bei NetworkConnection nicht weiter gemacht. NetworkConnection networkIdentify.connectionToClient - gibt den Connection zu dem Client zurück. Weiß hier aber nicht, ob der Owner irrelevant ist. Wenn ja dann networkIdentify.clientAuthorityOwner benutzen Nun hast du den "realen" Client man könnte es ClientNetworkConnection nennen.. networkConnection.clientOwnedObjects - gibt alle gameObjects aus (als Liste natürlich), die man "besitzt". ------------------------- UNet + HLAPI mit (oder ohne) NetworkManager ist nicht so aufgebaut, wie man das üblich bei anderen Networking Sachen (meistens außerhalb des Gaming bereich) kennt. UNet ist so bestimmt, dass du immer das eine GameObject bist und du bestimmst was mit den passiert, sofern du der owner bist. Daher braucht man eigentlich so gut wie nie fragen "Wer bin ich eigentlich?". Eher die Frage "Was bin ich?" ist hier wichtiger (Server / -Owner , Client / -Owner, etc ) 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.