Jump to content
Unity Insider Forum

Sync Mecanim Animation


MarcoMeter

Recommended Posts

Ja naja so das wenn ich die Waffe habe und sie auch sehe in meiner Hand das der andere sie auch in meiner Hand sieht bis jetzt sehe ich sie nur von meiner Seite aus aber der andere nicht und andersrum genauso das wenn er etwas in der Hand hat das ich nicht nur die Animation sehe sondern das zu der Animation er auch die Axt in der Hand hat und bis jetzt funktionieren wie gesagt die Animationen aber das GameObject in diesem fall die Axt sehe nur ich in meiner Hand der andere sieht nur das meine Hand oben ist ;)))) ich weiß bin ein schwerer Fall lach

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie gesagt, nur derjenige im Netzwerk, der ein GameObject instanziiert, hat dieses lokal exklusiv in seiner Hierarchie. Die anderen nicht, weil die nicht Instantiate ausführen. Also musst du dies bei allen im Netzwerk ausführen lassen. Per RPC Call oder Network.Instantiate. Daraus folgt, dass du die Referenz auf deine neue Waffe nicht so indiskret erhalten kannst.

 

jetztWaffe = Network.Instantiate() geht nicht, weil diese Funktion kein GameObject zurückgibt.

 

Da du nur mit Network.Instantiate() das ganze durchführen kannst, musst du dir einen Weg ausdenken, wie du dir die Referenz auf das neue Objekt in deine jetztWaffe holst.

 

 

Eine gute Idee hätte ich aber spontan:

 

Dein Spielerobjekt hat schon alle Waffen instanziiert (sprich einfach in der Hierachie/Prefab angehangen). Jede dieser Waffen, welche GameObjects sind, deaktivierst du, bis auf die aktive. Dann kannst du dir jetzt schon alle Referenzen z.B. in einem Array von GameObjects speichern. Anstelle des Instantiate() Befehls nutzt du dann die Referenz des gameObjects und rufst .isActive(true); bei dem gameObject, welches genutzt werden soll auf. Das andere wird auf .setActive(false); gesetzt.

 

Das ganze muss natürlich in einen RPC Call rein.

 

zB

 

[RPC]

void WaffenWechsel(gameObject alteWaffe, gameObject neueWaffe)

{

alteWaffe.setActive(false);

neueWaffe.setActive(true);

}

 

 

 

der Aufruf ergibt sich dann wie folgt:

 

networkView.RPC("WaffenWechsel", RPCMode.AllBuffered, axt, schwert);

 

 

 

Mit dieser Möglichkeit bist du nich auf Instantiate() angewiesen, weil jeder Spieler schon jede Waffe hat - es ist aber nu eine aktiviert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich habs mir nicht angeguckt, vermutlich aber nicht viel

 

du brauchst halt alle Waffen shcon auf deinem Spieler. In deinem Script machst du dann ein GameObject[] Array oder für jede Waffe eine GameObject Variable, machst die public und dann kannst du dir die Referenz in den Inspector reinziehen. Anstatt Instantiate() machst du dann einfach den oben geschriebenen RPC Call.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Habe es mal so probiert

 

void OnNetworkInstantiate(NetworkMessageInfo info) {

if (networkView.isMine){

 

// kommt von der Animation "keineWaffe"

if (networkView.isMine) {

if (jetztWaffe != null) { // hatte ich schon eine Waffe, dann zerstöre sie

Destroy (jetztWaffe);

}

 

if (axt) { // ich habe zur Axt gewechselt

jetztWaffe = Network.Instantiate(AxtObj, axtPlatz.position, axtPlatz.rotation, 1) as GameObject; //instanziere die Waffe am rechten Platz und übergib sie auch der Variable

jetztWaffe.transform.parent = axtPlatz;

 

// mache die Waffe zum Chlid des messerPlatzes

}

 

 

if (messer) { // ich habe zum MesserObj gewechselt

jetztWaffe = Instantiate (MesserObj, messerPlatz.position, messerPlatz.rotation) as GameObject;

jetztWaffe.transform.parent = messerPlatz;

}

 

if (flinte) { // ich habe zur Flinte gewechselt

jetztWaffe = Instantiate (FlinteObj, flintePlatz.position, flintePlatz.rotation) as GameObject;

jetztWaffe.transform.parent = flintePlatz;

}

 

if (pistole) { // ich habe zur Flinte gewechselt

jetztWaffe = Instantiate (PistoleObj, pistolePlatz.position, pistolePlatz.rotation) as GameObject;

jetztWaffe.transform.parent = pistolePlatz;

}

 

//wechsel ist fertig

 

anim.SetBool ("wechsel", false);

 

 

}

 

}

}

 

 

aber dann spawnt er sie nur also bei jeder Bewegung eine aber hmmmmm

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe oben erklärt, wie du Network.Instantiate nicht nutzen musst. Zusätzlich habe ich dir erläutert, dass variable = Network.Instantiate() nicht geht, weil diese Methode keinen Rückgabewert hat.

 

Also lies dir nochmal alles durch, mehr kann ich auch nicht tun, wenn du meine Beiträge nicht richtig liest.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja doch bin dir auch dankbar nur das eine geht nicht wie du sagst und das andere da muss der Code umgeschrieben werden habe da gerade eine Unwissenheit wie ich das bewerkstelligen soll RPC CALL ok wie was und wo muss ich es ändern und was muss dazu geschrieben werden du willst das ich die GameObjecte wie z.b. Axt;Flinte,Messer,Pistole ...Public im Script mache und in der Hierarchie deaktiviere ich alle außer die ich habe ok das habe ich verstanden und im Script soll ich dann was weiter machen ? ;) mein Problem ist wie soll ich das mit dem schon vorhandenen Code umsetzten die RPC? ;)))

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...