Mino1337 Geschrieben 11. März 2018 Melden Share Geschrieben 11. März 2018 Hallo, ich bin ein Unity-Noob und möchte zuallererst einmal per Script ein Gameobject mit 2D Sprite in meiner Spielwelt erscheinen lassen. Folgendes habe ich bisher aus dem Netz erarbeitet: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Berechnungen : MonoBehaviour { Sprite BildEins = Resources.Load<Sprite>("Eins"); public GameObject G; void Start () { G = new GameObject("G"); G.AddComponent<Transform>(); G.AddComponent<SpriteRenderer>(); G.GetComponent<SpriteRenderer>().sprite = BildEins; G.transform.position = new Vector3(0,0,0); G.transform.localScale = new Vector3(1, 1, 1); Instantiate(G, transform.position, Quaternion.identity); } // Update is called once per frame void Update () { } } "G" Wurde in der Initialisierung zusammengebaut und erstellt. Theoretisch müsste ich also "G" mit dem Sprite "Eins" in der Mitte meines Spielbildschirms sehen. Da ist kein Bild was es verdecken könnte und das Script hab ich auf ein bereits im Spielfeld rumschwebendes unsichtbares Gameobjekt angewendet das einfach immer da ist (ein Standart Scriptcontainer eben). Der Ordner "Resources" existiert tatsächlich und das Bild "Eins" ist auch da drin. Was hab ich also falsch gemacht ? Vielen Dank für nützliche Ratschläge. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 12. März 2018 Melden Share Geschrieben 12. März 2018 Moinsen und willkommen hier! Bis du dich ein bisschen eingearbeitet hast, würde ich empfehlen, die Finger von Resources.Load zu lassen. Das Ding hat einige Implikationen, die in noch unüberschaubare Gebiete gehen. Der übliche Weg, ein Objekt zur Laufzeit zu erzeugen, ist Instantiate mit einem Prefab. Statt dir über AddComponent-Code ein Objekt zusammen zu bauen, baust du es im Editor. Dann siehst du auch, was du tust. Das fertige GameObject ziehst du dann aus der Hierarchie (das Teilfenster, wo alle Objekte der Szene in einer Liste sind) in die Project View (wo deine Assets sind). Was du dann hast, ist eine (meist) exakte Kopie des GameObjects - nur halt nicht in der Szene, sondern in den Assets. Diese Kopie nennt sich dann "Prefab", ist aber vom Typ her nach wie vor ein GameObject. Jetzt gibt es die Funktion namens Instantiate, die eine Kopie eines GameObjects erstellt. Wenn man diese Funktion mit einem Prefab füttert, dann wird eine Kopie des Prefabs in der Szene erstellt, und schon hast du dein Objekt erstellt. In deinem Code erstellst du mit "new GameObject" ein GameObject, und dann kopierst du es mit Instantiate gleich noch einmal. Du hast also zwei Objekte auf einmal erstellt. Der Code für Prefab-Instantiate sieht jedenfalls etwa so aus: public GameObject prefab; // Hier im Editor dein Prefab reinziehen private void Start() { Instantiate(prefab, transform.position, Quaternion.identity); } und das war's auch schon. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
KaBau Geschrieben 12. März 2018 Melden Share Geschrieben 12. März 2018 Kann man auch aus 2 Prefabs ein Gameobjekt erstellen? Also das 3D Model als Prefab Teil A und ein Bewegungsscript als Teil B um damit ein neues Gameobjekt zu erstellen? Ich spawne wie oben geschrieben mit "Instatiante" an verschiedenen Stellen des Game Reihen von Gegner. Derzeit bei mir: Gegner 1: Modell A + Script A (Flug geradeaus) Gegner 2: Modell B + Script A Gegner 3: Modell A + Script B (Bogen nach links) Gegner 4: Modell B + Script B Gegner 5: Modell A + Script C (Boden nach rechts) Gegner 6: Modell B + Script C Aber eigentlich brauche ich nur 2 Modelle und 3 Scripts (Scripte?). Das würde auch das Ändern von Gegnern verbessern, da ich bei der Änderung des Modell A nicht 3 Prefabs anpassen muss. Noch schöner: ich kann dem Spawner eine Variable geben, welche er in das Script beim Spawnen einfügt. Somit kann ich den Bogen nach links und den Bogen nach rechts einmal als positiven Wert und einmal als negativen Wert angeben und spare noch ein Script. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. März 2018 Melden Share Geschrieben 13. März 2018 Klar, geht alles. Also... zwei Objekte zu einem vereinen wäre ziemlich unpraktisch, aber du kannst die beliebig einander unterordnen. Der Rückgabewert von Instantiate ist eine Referenz auf das erzeugte Objekt, damit kannst du weiterarbeiten. Mit diesem Code baust du z.B. ein Objekt "object0", dem ein anderes "object1" untergeordnet ist. var object0 = Instantiate(prefab0); var object1 = Instantiate(prefab1, prefab0.transform); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Mino1337 Geschrieben 14. März 2018 Autor Melden Share Geschrieben 14. März 2018 Dankeschön, hat mir sehr geholfen. Mit diesem Wissen sollte ich mein Projekt durchziehen können =D. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
An2435 Geschrieben 21. Dezember 2018 Melden Share Geschrieben 21. Dezember 2018 Den Rat habe ich intuitiv befolgt und die Ziffern 0 bi 9 als public GameObject Ziffer0 bis 9 meinem Script zur Verfügung gestellt. Evtl. mache ich das nun auch noch mit 26 Buchstaben und ein paar Sonderzeichen, aber spätestens dann wird es unlustig. Ein for 0 bis x erfinde Gameobject mit Sprite lala.x wäre mir dann lieber. Oder sollte ich z.B. eine Grafik komplett mit 0123456789 nehmen und immer nur den kleinen Ausschnitt anzeigen, den ich brauche? Dann über Visible Inside Mask? Man würde dann fünf Platten von 00000 bis 99999 jeweils hin- und herschieben anstatt Prefabs zu initiieren und wieder zerstören? Wäre das die bessere oder die beste Lösung beim Einsatz von Grafiken als Ziffern (und Buchstaben)? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
KaBau Geschrieben 21. Dezember 2018 Melden Share Geschrieben 21. Dezember 2018 Hallo @An2435, ich denke mir es macht Sinn, dass du mitteilst, dass deine Antwort in Verbindung mit deinem Thema "Score mit Grafiken" steht. Dort habe ich dir noch einmal geantwortet. 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.