2016-04-20 25 views
0

Ich versuche, in Fehlern, um herauszufinden, was die folgende Differenz verursacht, wenn UNET mit:UNET: Unterschiede mit Unity-Editor und Anwendung in Laufe

ich mein Projekt im Editor leite und in Antragsformular bei der Gleichzeitig testen Sie die Multiplayer-Funktionalität. Die Funktionalität, die ich teste, ist das Erstellen/Erstellen von Projektilen. Wenn ich den Editor zum Host und die Anwendung zum Client mache, kann nur der Host die Projektile sehen. Wenn ich jedoch dem Redakteur den Client und die Anwendung den Host mache, können beide Spieler die Projektile sehen.

Hier wird es merkwürdig: Egal, welche Kombination ich verwende, wenn es auf zwei Anwendungen läuft, anstatt nur einer Anwendung und des Editors, nur der Host kann die Projektile sehen.

Warum funktioniert diese spezielle Kombination und wie kann ich sie für jedes Setup verwenden?

Hier ist der Laichcode; wenn es das Problem nicht sicher ist:

[Command] 
public void CmdFireProjectile(Quaternion cA, Vector3 tF, string pN) { 
    GameObject projPrefab = Projectile.getProjectilePrefab(pN); 
    GameObject proj = (GameObject)Instantiate(projPrefab, new Vector3(transform.position.x, transform.position.y + .4f, transform.position.z) + tF, cA); 
    proj.GetComponent<Projectile>().setSource(this); 
    NetworkServer.Spawn(proj); 
} 

Antwort

1

Also habe ich es herausgefunden: Die Klasse, die die Prefabs des Projektils registriert, auf die zugegriffen werden soll, wurde so eingestellt, dass sie nur auf dem Server existiert. Die Clients haben also versucht, Projektile zu erstellen, aber sie haben keine vorgefertigten gefunden. Nicht sicher, warum es speziell funktionierte, wenn es im Unity-Editor ausgeführt wurde ...

0

Ok zunächst Ich verstehe Unet nicht compleltly aber ich habe die gleichen Probleme haben wie Sie hier, was ich es zu debuggen tat und versuchen Sie Folgendes: 1- Sicherstellen, dass die Projektil-Prefabs werden zum NetworkManager-Skript hinzugefügt. 2- In Ihrem Befehl verwenden Sie die bool check hasAuthority und verwenden Sie networkspawn innerhalb von True und False. 3. Rufen Sie von Ihrem Befehl einen Client rpc und verwenden Sie NetworkSpawn dort auch 4- Verwenden Sie NetworkSpawnwithClientAuthority (this.gameobject) Lassen Sie mich wissen, ob diese funktionierte oder nicht. Nonethless in Unity Docs Die Funktion networkSpawn From sollte sowohl auf dem Host als auch auf dem Client funktionieren, aber es scheint immer nicht zum ersten Mal zu funktionieren, manchmal aber auch.

+0

"In Ihrem Befehl verwenden Sie die hasAuthority bool check und verwenden Sie networkspawn innerhalb von True und False." Warte, verwende ich es ob es falsch ist oder nicht? Oder meintest du nur zu sagen wahr? Würde ich NetworkServer.SpawnWithClientAuthority() auch im RPC oder im Befehl verwenden? – user2975229

+0

Verwenden Sie in beiden, True und False, wenn es nicht funktioniert, verwenden Sie spawnwithclientAutority in der Befehlsfunktion, grundsätzlich alle Kombinationen versuchen – LumbusterTick