2017-05-30 20 views
1

ich arbeite an einem kleinen 3D-Spiel für 2 Spieler in Unity. Das Spielkonzept ist ein Weltraum-Rennen, bei dem man durch Ringe fliegen muss. Als zusätzliche Funktion möchte ich dem Spieler die Möglichkeit geben, den anderen Spieler zu drücken. Wenn sie also einen bestimmten Knopf drücken, sollte ihr Raumschiff eine "Schockwelle" senden, die den anderen Spieler trifft und ihn ein wenig zurückdrängt. Das wollte ich mit den Funktionen Physics.OverlapSphere und AddExplosionForce realisieren. Ich testete dies in einer lokalen Extra-Szene ohne die Netzwerkfunktion und es funktionierte sehr gut.Unity AddExplosionForce synchronisieren über den Network Manager

Da ich die Funktion in das reale Spiel importieren wollte, habe ich das Problem, dass der Effekt nur den lokalen Spieler trifft und nicht den anderen. Der andere ist nur merkwürdig zurückgeblieben und hat seine Position nicht geändert (in der anderen Spielinstanz auch nicht. Es ist, als hätte der Klient die Änderung nicht bekommen).

Ich muss sagen, ich benutze bereits den Network Manager und die normale Bewegung mit "Wasd" funktioniert für beide Spieler.

den Code Nach verwende ich (es ist nur die Standard-Beispiel):

Vector3 explosionPos = transform.position; 
Collider[] colliders = Physics.OverlapSphere(explosionPos, radius); 
foreach (Collider hit in colliders) 
{ 
    Rigidbody rb = hit.GetComponent<Rigidbody>(); 

    if (rb != null) 
    rb.AddExplosionForce(power, explosionPos, radius, 3.0F); 
} 

Kennt jemand, wenn es etwas, das ich für das Netzwerk, was fügen haben?

+0

Ich habe das Gefühl, dass der Effekt, den Sie erreichen wollen, sehr schwierig sein wird, ohne dass eine seriöse Autorität die Physik berechnet. Wegen der Netzwerklatenz wird Spieler 1 (Aktivierung der Fähigkeit) Spieler 2 an einem anderen Ort sehen, als Spieler 2 sich selbst sieht. Wenn man also diese Explosion auf Spieler 2 überträgt, wird eine andere Kraft angewendet und das Spiel desyncs und du bekommst Gummiband. Welcher Kunde ist richtig? Stimmt der Client von Spieler 2 immer für die Position von Spieler 2? Ist Spieler 1, weil sie die Fähigkeit benutzt haben? – Draco18s

Antwort

1

Versuchen Sie, eine [Command] -Funktion zu erstellen, die die [ClientRpc] -Funktion mit dem von Ihnen bereitgestellten Code ausführt. Es sollte in etwa so aussehen:

Verwandte Themen