CptGreenwood Geschrieben 31. Mai 2017 Melden Share Geschrieben 31. Mai 2017 Hallo, ich habe ein Problem mit dem Parenting von GameObjects. In meinem Spiel habe ich ein texturiertes Quad, was ein Radar darstellt. Dieses Radar kann von dem Spieler per Mausziehen um sein Zentrum gedreht werden. Nun möchte ich eine Gegnerfigur (ebenfalls texturiertes Quad) auf dem Radar als Child an einer speziellen Position hinzufügen, so dass es seine relative Position und Rotation beibehält, wenn der Spieler das Radar dreht. Wenn ich im Editor eine Prefab-Instanz des Gegners als Child unter das Radar ziehe, funktioniert alles perfekt. Wenn das Radar gedreht wird, bleibt der Gegner auch an der relativen Position und auch die Rotation ist korrekt. Wenn ich das aber in einem C#-Script versuche, funktioniert es nicht richtig. Erst habe ich es so versucht: GameObject enemy = Instantiate(enemyPrefab, radar); enemy.transform.position = [gewünschte Position]; enemy.transform.rotation = Quaternion.identity; Dann habe ich es nochmal so probiert: GameObject enemy = Instantiate(enemyPrefab, new Vector3(), Quaternion.identity); enemy.transform.parent = radar; enemy.transform.position = [gewünschte Position]; In beiden Fällen ist das Ergebnis gleich. Der Gegner wird zwar ein Child des Radars, wird das Radar jedoch rotiert, benimmt sich die Gegnerfigur falsch. Sie scheint um ein anderes Zentrum zu rotieren, also nicht das Zentrum des Radars. Daher bewegt sich der Gegner relativ zum Radar und behält auch seine Rotation nicht. Ich verstehe nicht, warum das Parenting im Editor einer andere Wirkung hat, als das Parenting per Script. Wie könnte ich nun vorgehen? Weiß jemand eine Lösung? Danke im Voraus! Viele Grüße Ralf Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 31. Mai 2017 Melden Share Geschrieben 31. Mai 2017 Probiere es mal so (das Parenting verändert auch die lokale Position des Childs und daher sollte man die Position zuerst setzen): GameObject enemy = Instantiate(enemyPrefab, new Vector3(), Quaternion.identity); enemy.transform.position = [gewünschte Position]; // enemy.transform.rotation = [gewünschte Rotation]; enemy.transform.parent = radar; Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
CptGreenwood Geschrieben 1. Juni 2017 Autor Melden Share Geschrieben 1. Juni 2017 Hi Zer0Cool, danke. Ich werde es mal ausprobieren und berichten. VG Ralf Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Torigas Geschrieben 1. Juni 2017 Melden Share Geschrieben 1. Juni 2017 https://docs.unity3d.com/ScriptReference/Transform.SetParent.html Das schonmal versucht? Dort kann man den Parameter worldPositionStays nutzen. Hat mir manchmal geholfen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
CptGreenwood Geschrieben 1. Juni 2017 Autor Melden Share Geschrieben 1. Juni 2017 @Zer0Cool : Hat leider nicht geklappt. Das Ergebnis war wieder das Gleiche. :-( @Torigas: Danke, werde ich mal lesen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
CptGreenwood Geschrieben 1. Juni 2017 Autor Melden Share Geschrieben 1. Juni 2017 @Torigas: Das hat tatsächlich funktioniert! Vielen Dank! Jetzt kann es mit dem Spiel endlich weiter gehen... 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.