Garzec Geschrieben 26. Februar 2017 Melden Share Geschrieben 26. Februar 2017 Guten Abend, für das Spiel "Schiffe versenken" habe ich zwei Partikelsysteme entworfen. Bei einem Treffer, wird auf dem Feld eine Explosion erzeugt, ansonsten ein WaterSplash. Da die beiden Systeme default mäßig eine Transform Größe von 1,1,1 haben, möchte ich, dass sie beim Erzeugen eine relative Größe zum Feld haben, damit der Radius wirklich nur auf dieses Feld begrenzt ist. Nun ist das Problem, dass das Partikelsystem 1. beim Abspielen sehr seltsam aussieht und 2.riesig ist, also nicht auf dem Feld. Ich packe da noch ein Video dazu. Zu den relevanten Codestellen: Meine Datenklasse... public GameObject ParticlesExplosion { get { return particlesExplosion; } } public GameObject ParticlesWatersplash { get { return particlesWatersplash; } } Der Controller private void PlayerClick() { if (cellData.IsEnemyCell) // Zelle auf Gegnerseite { if (!cellData.WasActivated) // Zelle noch nicht geklickt { if (cellData.IsShipCell) // Treffer? { cellView.SetCellColor(cellData.HitColor); // Farbe ändern CreateParticleEffect(cellData.ParticlesExplosion); // Explosion erzeugen } else // kein Treffer { cellView.SetCellColor(cellData.NoHitColor); // Farbe ändern CreateParticleEffect(cellData.ParticlesWatersplash); // WaterSplash erzeugen } cellData.WasActivated = true; // Zelle kann nicht mehr geklickt werden DestroyParticleEffect(cellData.ParticlesExplosion); // Daten wieder löschen DestroyParticleEffect(cellData.ParticlesWatersplash); // Daten wieder löschen } } private void CreateParticleEffect(GameObject particles) { GameObject particleSystem = Instantiate(particles, new Vector3( // Die Position der Zelle gameObject.transform.position.x, gameObject.transform.position.y + cellData.ParticlesHeight, // etwas höher als die Zelle gameObject.transform.position.z), particles.transform.rotation); // Rotation des Partikelsystems particleSystem.transform.parent = gameObject.transform; // Partikelsystem zum Kind der Zelle machen, damit die Größe relativ bleibt } private void DestroyParticleEffect(GameObject particles) { Destroy(particles, 5); } } So und dann noch das Video zum angucken (Habs verlinkt, hochladen konnte ichs als .flv nicht) https://sendvid.com/udprmgbr Wäre super, wenn mir da jemand helfen könnte Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 26. Februar 2017 Melden Share Geschrieben 26. Februar 2017 DestroyParticleEffect(cellData.ParticlesExplosion); // Daten wieder löschen DestroyParticleEffect(cellData.ParticlesWatersplash); // Daten wieder löschen Du zerstörst an dieser Stelle die Prefabs, die immer instanziiert werden, nicht die Instanzen. Soll das so sein? Was die kaputte Größe angeht, habe ich ganz stark particleSystem.transform.parent = gameObject.transform; im Verdacht. Das "gameObject.transform" oder einer seiner Parents hat mit Sicherheit eine Skalierung anders als 1,1,1. Das führt dazu, dass das Objekt als Child runterskaliert wird: Parent (scale 2,2,2)Child (scale 1,1,1) Bei diesem Beispiel würde das Child auf 2,2,2 hochskaliert werden, weil es relativ zum Parent die Größe 1,1,1 hat. Im Prinzip würde ich Objekte mit Children nach Möglichkeit nicht skalieren um solche Probleme zu verhindern. Du kannst aber auch SetParent statt "parent =" benutzen. Die Methode hat einen Parameter, die die absolute Skalierung erhalten kann. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Garzec Geschrieben 26. Februar 2017 Autor Melden Share Geschrieben 26. Februar 2017 Danke für den Tipp, ich habe die Methode mal daraufhin zusammengefasst zu GameObject particleSystem = Instantiate(particles, new Vector3( gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z), particles.transform.rotation); Destroy(particleSystem, 5); Die Methode particleSystem.transform.SetParent(gameObject.transform, false); ist sehr hilfreich, leider wird dadurch, dass die Zellen nun auf 1,0.2,1 stehen, das Partikelsystem stark verschoben, von daher lasse ich das mit dem Kindobjekt, da die Partikelsysteme sowieso nach einer gewissen Zeit zerstört werden sollen. Und nein, das Zerstören sollte nicht so sein, sondern auf die korrekte Weise aber durch deine Frage habe ich auch den Fehler entdeckt und das dementsprechend oben in der Methode angepasst. Danke Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.