In Netzwerkverbindungs-Gameplay bestimmen die Rolle und Remote-Rolle eines Actors, welche Maschine die Berechtigung hat, den Zustand des Actors zu Ändern und Remote Procedure Calls aufzurufen. Diese Eigenschaften helfen dir, die folgenden Fragen zu einem Actor in deinem Mehrspieler-Spiel zu beantworten:
Ist dieser Actor repliziert oder nicht?
Wer hat Authority über diesen Actor?
Was ist die Replikationsrolle für diesen Actor?
Actor-Rolle und Remote-Rolle sind nicht dasselbe wie Besitz! Weitere Informationen findest du unter: Actors und ihre zugehörigen Verbindungen.
Rolle des Actors und Remote-Rolle anzeigen
Du kannst die aktuelle Rolle und die Remote-Rolle eines Actors im Details-Panel des Unreal Editors sehen:
Die Rolle und die Remote-Rolle eines Actors können auch in C++ oder Blueprints abgerufen werden.
Ermittelt Rolle des Actors
Um zu bestimmen, wie viel Kontrolle der lokale Rechner über diesen Actor hat, rufe AActor::GetLocalRole auf:
AMyActor* MyActor;
...
// Once you have a valid Actor pointer...
const ENetRole LocalRole = MyActor->GetLocalRole();
// LocalRole contains the Actor's Role
...Ermittelt Remote-Rolle des Actors
Um zu bestimmen, wie viel Kontrolle ein Remote-Rechner über diesen Actor hat, rufe AActor::GetRemoteRole auf:
AMyActor* MyActor;
...
// Once you have a valid Actor pointer...
const ENetRole RemoteRole = MyActor->GetRemoteRole();
// RemoteRole contains the Actor's RemoteRole
...Actor-Rollenzustände
Die Actor-Rolle und die Remote-Rolle werden durch einen Zustand der ENetRole -Enumerationsklasse (definiert in EngineTypes.h) dargestellt. Die folgende Tabelle listet diese Zustände auf und beschreibt sie:
| Net Role State | Beschreibung |
|---|---|
| Keine Rolle. Dieser Actor wird nicht repliziert. |
| Simulierter Proxy dieses Actors. Dieser Actor simuliert den wahren Zustand, ist aber nicht berechtigt, den Zustand zu ändern oder Remote-Funktionen aufzurufen. |
| Autonomer Stellvertreter dieses Actors. Dieser Actor simuliert den wahren Zustand und ist berechtigt, den Zustand zu ändern und Remote-Funktionen aufzurufen. |
| Autoritative Kontrolle über diesen Actor. Dieser Actor enthält den wahren Zustand für die Vernetzung und ist befugt, den Zustand zu ändern und Funktionen aufzurufen. Dieser Actor ist auch dafür zuständig, Änderungen an Eigenschaften zu verfolgen und sie an verbundene Clients zu replizieren. |
Rollenmatrix für Client-Server
Unreal Engine verwendet das Client-Server-Modell für die Vernetzung. Infolgedessen hat der Server immer die Autorität über replizierte Actors. Das bedeutet, dass nur der Server jemals ROLE_Authority für replizierte Actors sehen sollte. Nicht replizierte Actors können auf Clients eine Local-Rolle von ROLE_Authority und eine Remote-Rolle von ROLE_None haben.
Die folgende Tabelle zeigt eine Matrix aus Local und Remote-Rolle, ob ein Server oder Client diese Rollenkombination beobachtet, und eine Beschreibung der Bedeutung dieser Kombination:
| Local-Rolle | Remote-Rolle | Server oder Client | Beschreibung |
|---|---|---|---|
|
| Server | Dieser Actor-Pawn wird von einem der verbundenen Clients gesteuert. |
|
| Client | Dieser Actor-Pawn wird von diesem verbundenen Client gesteuert. |
|
| Client | Dieser Actor-Pawn wird von einem der anderen verbundenen Clients gesteuert. Replizierte Actors, die nicht von einem Client gesteuert werden, können auch diese Rollenkombination haben. |
|
| Client | Dies ist ein nicht replizierter Actor. |
Simulation der Actor-Replikation
Server replizieren nicht alle Actors bei jedem Update, da dies zu viel Bandbreite und CPU-Ressourcen beanspruchen würde. Stattdessen repliziert der Server Actors mit der Frequenz, die in der AActor::NetUpdateFrequency -Eigenschaft angegeben ist. Das bedeutet, dass auf dem Client zwischen Actor-Updates etwas Zeit vergeht. Dies könnte dazu führen, dass Actors mit einer Charakter-Bewegungskomponente abgehackt und sporadisch aussehen. Um dies auszugleichen, simuliert der Client die Bewegung des Charakters zwischen den Updates.
Weitere Informationen zur Simulation der Replikation und Charakterbewegung findest du in der Dokumentation zur Komponente der Charakterbewegung unter „Netzwerkbasierte Bewegung“.
Rollen- und Remote-Rollen-Referenz
Funktionen
| Name | Beschreibung |
|---|---|
Kopiert die Remote-Rolle eines anderen Actors und fügt diesen Actor bei Bedarf zur Liste der Netzwerk-Actors hinzu. | |
Tausche Rolle und Remote-Rolle, wenn auf Client. | |
Gibt zurück, wie viel Kontrolle der lokale Rechner über diesen Actor hat. | |
Gibt zurück, wie viel Kontrolle der Remote-Rechner über diesen Actor hat. | |
Ruft den Eigenschaftsnamen für die Rolle ab. | |
Wenn wahr, wird dieser Actor nicht mehr auf neue Clients repliziert und auf Clients, auf die er repliziert wurde, „abgetrennt“ (wird zu | |
Wird unmittelbar nachdem eine neue Rolle von der entfernten Maschine empfangen wurde, aufgerufen. | |
Wird im Konstruktor von Klassen verwendet, die aus Gründen der Abwärtskompatibilität die Remote-Rolle einstellen müssen. | |
Setze den Wert der Rolle, ohne andere Nebeneffekte auf diese Instanz zu verursachen. | |
Tauscht die Rolle und Remote-Rolle für diesen Actor. Sei vorsichtig und rufe diese Funktion nur auf, wenn du die Nebenwirkungen verstanden hast. |
Eigenschaften
| Name | Beschreibung |
|---|---|
Ob Rolle und Remote-Rolle auf dem Client ausgetauscht wurden. |