Jump to content
Unity Insider Forum

Rechte über Gameobject an Server übergeben


Recommended Posts

Ich möchte ein einfaches verteiltes System in Unity aufbauen, bei dem ich Gameobjects sowohl auf der Serveranwendung als auch auf der Clientanwendung bewegen kann.

Ich habe ein Gameobject in der Szene mit einer NetworkManager und NetworkManagerHUD Komponente. Der NetworkManager erhält unter Spawn Info ein Gameobject-Prefab.

Dieses Prefab hat eine NetworkTransform und NetworkIdentity Komponente. Die NetworkIdentity Komponente hat LocalPlayerAuthority aktiviert.

 

Jetzt starte ich die Szene und wähle "LAN Server Only(S)". Ich starte die gleiche Szene in einer zweiten Unity-Instance (gleiches Projekt einfach dubliziert) und wähle "LAN Client©".

Jetzt wird das Prefab Gameobject vom NetworkManager gespawnt.

 

Ich kann nun zwar beim Client das Objekt bewegen und sehe die Bewegung gleichzeitg beim Server, aber andersrum geht es nicht, sprich wenn ich das Objekt beim Server bewege, dann sieht man die Änderung nicht beim Client.

 

Jetzt weiß ich, dass das wohl daran liegt, weil immer nur eine Anwendung die "Authorität" über das Gameobject besitzt.

 

Meine Frage ist, wie ich die Rechte über das Gameobject an den Server geben kann, sodass er es bewegen kann und der Client sieht dann direkt die Positionsänderung?

Ich weiß, dass es die Funktion "AssignClientAuthority" gibt, die einem Client das Recht über das Gameobject gibt, aber eine AssignServerAuthority gibt es nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Leider bereitet das mit Authority auch mir manchmal Kopfschmerzen.

Da fehlt mir noch mehr Info.

 

Du benutzt leider NetworkTransform, denn damit kommst du nicht weit bei sowas. Denn du bewegst etwas, aber danach erst wird an andere etwas gesendet.

 

(Ich mache das zum Beispiel anders. Ich sende die Inputs und lasse es durch das Netzwerk synchronisieren / setzen. Das heißt die Inputs können später auch durch andere Leute gesetzt werden. Jetzt muss man nur noch bissel das gleiche tun wie NetworkTransform und selber die Daten(position, rotation usw) über das Netzwerk senden, damit auch das nicht verfälscht bleibt.))

 

Und hier ist das Problem. Der Owner, also der Authority hat, kann nur das GameObjekt bewegen, ist egal ob man jetzt WASD drückt um zu Bewegen oder im Editor verschiebt, es wird immer die Sachen gesendet, was man im NetworkTransform eingestellt hat. Und als nicht Autoritärer kann man zwar etwas bewegen, aber NetworkTransform wird es immer wieder zurück bewegen. Man könnte auch quasi im Editor deaktivieren, aber dann hat man sich nur bei sich bewegt und nicht über das Netzwerk.

NetworkTransform tut, dass die Objekte da stehen, wo sie auch wirklich sind (wenn sie diese Informationen bekommen haben). Man kann Sync zu None machen, aber ich selber verstehe den Logik nicht darunter. Denn, dann braucht man den Komponenten auch gar nicht hinzufügen ^^.

 

Jetzt kann man zum Beispiel die Commands und ClientRpcs benutzen um "Remote" Bewegung zu machen

 

Ganz billig ohne wirklich auf Sicherheit zu achten (cheating)

Server sendet an ClientRpc(bewege zu position) an Client -> Client (der Owner) bewegt jetzt das Objekt.

Client sendet Command(bewege zu position) an Server (hier hat der Client ja das Objekt schon bereits bewegt. Der Server muss das auch noch bewegen.

 

Theoretisch könntest du einfach eine Positions Variable haben und die setzen und über das Netzwerk senden und immer im Update dann dahin bewegen lassen. Vllt ist das sogar ausreichend.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...