Jump to content
Unity Insider Forum

Teile meines Instanzierten Gameobjects sind verschoben


Mino1337

Recommended Posts

Hallo,

für mein Spiel habe ich einige Prefabs zusammengebaut um sie zu Instanzieren mit "Instantiate".

Für dieses Instantiate habe ich mir eine Methode gebaut die bei Prefabs mit einem Element (zb einer Grafik) auch wunderbar funktioniert.

    //Erzeugt ein 2D Gameobject mit Z=-1 
    GameObject PrefabsErzeugen(GameObject GO, float ScaleX, float ScaleY, float PosX, float PosY, float Rot)
    {
        GO.transform.localScale = new Vector3(ScaleX, ScaleY, 1);
        Instantiate(GO, GO.transform.position = new Vector3(PosX, PosY, -1), Quaternion.Euler(new Vector3(1, 1, Rot)));
        return GO;
    }

Jetzt haben meine neuen Prefabs als Bestandteile 3 Gameobjekte und 4 Grafiken. In einem dieser drei Gameobjekte sind zwei Grafiken welche jetzt wenn ich das Prefab mit meiner Methode auf den Bildschirm rufe verschoben sind. Zueinander sind die Grafiken nicht verschoben nur im Bezug auf den Rest meiner Prefab-Bestandteile.

Wenn ich aber das Prefab einfach so in die Szene ziehe dann ist alles an seinem Platz.

Ist es ein Problem das ich Gameobjekte als sammelordner genutzt habe für die Instantiate-Methode ?

Ich verstehe nicht wieso es nur dann nicht funktioniert wenn ich Instantiate nutze.

ich hoffe mir kann hier jemand helfen =).

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 56 Minuten schrieb Mino1337:

Wenn ich aber das Prefab einfach so in die Szene ziehe dann ist alles an seinem Platz.

Auch, wenn du das reingezogene Objekt skalierst und rotierst?

So am Rande - dieser Code macht eine Menge Dinge, die er nicht sollte. Da wäre zuerst einmal, dass du jedes Mal das Prefab abänderst. Es ist besser, die Instanz abzuändern, die Instantiate erzeugt. Wenn du "return GO" schreibst, gibst du auch das Prefab zurück und nicht die instanz.

Also statt

prefab.Dinge();
Instantiate(prefab);
return prefab;

lieber

var instance = Instantiate(prefab);
instance.Dinge();
return instance;

Als nächstes willst du nicht den Wert eines Objekts in einem Methodenargument ändern. Statt

Instantiate(prefab, prefab.transform.position = irgendeinePosition, ... );

bitte einfach

Instantiate(prefab, irgendeinePosition, ... );

Dann noch die komische Rotation... warum genau willst du dein Objekt auf X- und Y-Achse jeweils um 1° gedreht haben?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey,

das hat ganz wunderbar funktioniert mit einer Einschränkung. Meine Methode sieht jetzt ersteinmal so aus:

    //Erzeugt ein 2D Gameobject mit Z=-1 
    GameObject PrefabsErzeugen(GameObject GO, float ScaleX, float ScaleY, float PosX, float PosY, float Rot)
    {
        GameObject GOB = Instantiate(GO, new Vector3(PosX, PosY, -1), Quaternion.Euler(new Vector3(0, 0, Rot)));
        GOB.transform.localScale = new Vector3(ScaleX, ScaleY, 1);
        return GO;
    }

Die Lösung war die Instanz zu ändern die Instantiate erzeugt.

Nur leider ist jetzt ein TextMeshProUGUI verschwunden der vorher noch da war obwohl er im obersten sort-Layer ist =(. Der andere ist noch da oO.

Darum kümmer ich mich dann nach der Arbeit ...

 

Vielen Dank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...