Jump to content
Unity Insider Forum

Network.Instantiate für alle Spieler zurückgeben?


Recommended Posts

Hey

 

Wenn ich mit Network.Instantiate ein Prefab instanziere, so bekommt nur der Spieler, der den Network.Instantiate ausführt, auch das gespawnte Objekt zurückgegeben. Ich möchte aber, dass alle Spieler, das gespawnte Objekt geben bekommen, also als Variable. Ist das irgendwie möglich? wenn ja wie?

Link zu diesem Kommentar
Auf anderen Seiten teilen

nein meine ich nicht

 

eher so

 

client1 :

if (GUI.Button(new Rect(0,0,80,20),"instanzieranfrage")){
networkView.RPC("Spawn",RPCMode.Server,unit,position,value1);
//http://docs.unity3d.com/412/Documentation/ScriptReference/RPCMode.Server.html
}

 

das sieht nur der server.

 

der prüft .... und macht n rpc call an

 

http://docs.unity3d....PCMode.All.html

 

worin er sagt :

 

neues objekt ...... besitzer .... instanziert das oder ich kick euch ihr sklaven

 

 

du fragst in einer privaten nachricht (Rpcmode.server) ob er sich das anschaut

wenn er das für gut befindet was du willst : rpcmode.all vom server > allen ( auch dir )

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja das habe ich ja verstanden. Nur wie Instanzieren die Clients dann das Objekt? Wenn diese dann alle mit Network.Instantiate instanzieren würden, würden ja ganz viele Objekte spawnen, und nicht nur das Objekt des jeweiligen Spielers. und wenn die es mit Objekt.Instantiate instanzieren, so würde beispielsweise networkView.isMine keine Korrekte angabe mehr zurückgeben können

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja klar. Hier wird der Spieler Instanziert:

 

public void SpawnMe()
{
 if(!Spawned)
 {
  int Spawns = MapManager.currentMap.Spawns1.Count;
  player = (Transform) Network.Instantiate(SwatPlayerPrefab, MapManager.currentMap.Spawns1.ToArray()[Random.Range(0, Spawns)], Quaternion.identity, 0);
  Spawned = true;
 }
}

 

Dort instanziert sich der Spieler selbst, nach dem das Level geladen wurde, und speichert das instanzierte Objekt dann in einer Variable :)

 

Ich möchte aber nun halt, dass jeder Spieler, die Instanz von jedem anderen Spieler auch hat, und nicht nur die von sich selbst.

 

 

 

EDIT:

Im Grunde genommen hat ja jeder Spieler die instanz der anderen, aber halt nicht in einem Array etc. gespeichert. Nur im Spiel selbst

Link zu diesem Kommentar
Auf anderen Seiten teilen

du solltest quasi 2 spielerobjekte als prefab haben

1 bist du

1 sind alle anderen

1 ist der server ( z.b. gegenstände die beweglich sind )

 

 

jedes sein eigenen netview objekt drauf beim instanzieren oder dem prefab ;)

 

public void SpawnMe()
{
 if(Network.isServer){
gameobjektserver = (Transform) Network.Instantiate(serverPrefab, MapManager.currentMap.Spawns1.ToArray()[Random.Range(0, Spawns)], Quaternion.identity, 0);

  GetComponent(movescript).enabled = false;

 } else{

 gameobjekt player= (Transform) Network.Instantiate(SwatPlayerPrefab, MapManager.currentMap.Spawns1.ToArray()[Random.Range(0, Spawns)], Quaternion.identity, 0);



 player.GetComponent(movescript).enabled = true;
 }
 } }

 

ist aber nur ein theoretischer weg :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hm, so wirklich was ändern tuht das ja nicht. Ich glaub du hast mich einfach falsch verstanden^^

Ich möchte dass Jeder Spieler, ein Array mit allen Instanzen von allen anderen Spielern hat.

 

Also sowas wie:

GameObject[] Players

 

und da drin sind alle Network.Instantiate Instanzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hm, so wirklich was ändern tuht das ja nicht. Ich glaub du hast mich einfach falsch verstanden^^

Ich möchte dass Jeder Spieler, ein Array mit allen Instanzen von allen anderen Spielern hat.

 

Also sowas wie:

GameObject[] Players

 

und da drin sind alle Network.Instantiate Instanzen.

 

wozu braucht dein spieler eine liste mit den anderen spielern

Link zu diesem Kommentar
Auf anderen Seiten teilen

Network.Instantiate ist bereits als RPC Call gelöst und erstellt bei allen Clients das angegebene Prefab, da daraus ein GO kommt mit Scripten kannst du also ein Script an das GO legen was einfach dafür sorgt dass sich das neu erzeugte GO in eine Liste (List) einträgt zu die er soich zuordenen soll:

 

TeamA.Participants.Add(this);

 

Darauf kann der Spieler ja problemlos zugreifen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Network.Instantiate ist bereits als RPC Call gelöst und erstellt bei allen Clients das angegebene Prefab, da daraus ein GO kommt mit Scripten kannst du also ein Script an das GO legen was einfach dafür sorgt dass sich das neu erzeugte GO in eine Liste (List) einträgt zu die er soich zuordenen soll:

 

TeamA.Participants.Add(this);

 

Darauf kann der Spieler ja problemlos zugreifen.

 

ohje Mensch wieso bin ich da nicht gleich drauf gekommen :D

Vielen Dank :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

erklär doch mal wozu braucht ein spieler ein array mit allen anderen spielerdaten

ich hab noch nie mit networking was gemacht würde mich mal interessieren

 

Zum Beispiel die Lebensanzahl eines Spielers etc.

Oder um nen bestimmten Spieler zu markieren, also ja kann ich schlecht erklären. in meinem Spiel kann man Spieler markieren und dafür bräuchte ich dann eine Liste damit ich abfragen kann welcher Spieler markiert werden soll.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...