Unity 5 2D-Zeichnungssprites programmgesteuert

8

Wie kann ich Sprites in Unity 5 programmgesteuert zeichnen? Ich suche etwas Ähnliches wie spriteBatch.Draw()in XNA. Die Ergebnisse, die ich bei der Suche erhalte, sind entweder veraltet unter http://wiki.unity3d.com/index.php?title=SpriteManager (dies wurde 2012 geschrieben) oder sie werden über die Unity-Oberfläche erstellt. Ich kann nur eine SpriteKlasse in UnityEngine.dll finden. Brauche ich das Wie würde das Zeichnen funktionieren? Ich verstehe es wirklich nicht.

dimitris93
quelle
Was meinst du mit Sprites zeichnen? Sie wollen sie auf dem Bildschirm rendern oder das vom Sprite dargestellte Bild dynamisch erstellen?
MichaelHouse
@ Byte56 Rendern eines 2D-Bildes auf dem Bildschirm, genau wie jede 2D-Game-Engine, die ich gesehen habe. Ich weiß nicht, warum dies bei der Suche in Google so frustrierend schwer zu finden ist. Ich brauche so etwas wie spriteBatch.Draw (SpriteSheetName, Position, Rechteck, Ursprung, Skalierung, Drehung), wo das Rechteck den Teil des Sprite-Sheets definiert, den ich zeichnen möchte. Ich versuche jetzt, dies zu tun, indem ich ein Spriteund dann ein mache, SpriteRendereraber ich kann nicht herausfinden, wie man ein Bild auf das Sprite setzt.
dimitris93
@ Byte56- SpriteObjekte scheinen nicht einmal eine Eigenschaft zum Festlegen des Bildes zu haben. Das nächste, was ich sehe, ist sprite.texture, das schreibgeschützt ist ... eigentlich ist jede Eigenschaft von sprite schreibgeschützt
dimitris93

Antworten:

16

Unity verfügt nicht über diese Art von "Direktmodus" -Rendering. Sie werden Drawkeine Update-Schleifen für Unity aufrufen .

In Unity müssen Sie ein Spielobjekt erstellen und dann Skripte an dieses Spielobjekt anhängen. Diese Skripte steuern, wie sich das Objekt verhält, ob und wie es auf dem Bildschirm angezeigt wird, ob es Teil des Physiksystems usw. ist.

Um ein neues Sprite zum Zeichnen auf dem Bildschirm zu erstellen, müssen Sie ein neues Spielobjekt erstellen, das SpriteRenderer-Skript daran anhängen und das Sprite festlegen.

GameObject go = new GameObject();
SpriteRenderer renderer = go.AddComponent<SpriteRenderer>();

renderer.sprite = Resources.Load("Sprites/Player", typeof(Sprite)) as Sprite;

Dies setzt eine Verzeichnisstruktur von voraus

-Assets
--Resources
---Sprites
----<Your 2D assets, set with their texture type to Sprite (2D and UI)>

Zum Beispiel:

Geben Sie hier die Bildbeschreibung ein

Dann hatten Sie ein anderes Skript zum Ändern der Position, Drehung usw., je nachdem, wie Sie sich verhalten möchten.

Der einfachste Weg, dies alles zu erreichen, ohne so viel Code schreiben zu müssen? Erstellen Sie das Spielobjekt zuerst im Unity-Editor. Sobald das Spielobjekt mit dem gewünschten Sprite und den Verhaltensskripten und all dem ausgestattet ist. Ziehen Sie es per Drag & Drop in ein Ressourcenverzeichnis. Dadurch entsteht ein Fertighaus. Fertighäuser sind genau das, wonach sie klingen, Vorfertigungen. Es handelt sich um vollständige Objekte, auf die Sie im Handumdrehen verweisen und sie erstellen können.

Sie würden solche erstellen wie:

public void CreateObject(string prefabName) {
   GameObject newObject = 
      GameObject.Instantiate(Resources.Load(prefabName)) as GameObject;
}

Dadurch wird ein Klon des zuvor erstellten Fertighauses erzeugt. Wenn Sie beispielsweise Ihrem Fertighaus das Verhalten gegeben haben, sich auf den Spieler zu bewegen und anzugreifen, bewegen sich diese jedes Mal, wenn Sie ein neues Fertighaus dieses Typs erzeugen, auf den Spieler zu und greifen an. Die Skripte, die Sie nur einmal schreiben mussten, steuern alle diese Spielobjekte.

Ich denke, der Hauptunterschied, den Sie hier sehen, ist der starke Einsatz von Komponenten. Was Sie wahrscheinlich in anderen Game-Engines wie XNA noch nicht gesehen haben. Unity ist wirklich ein leistungsstarker Motor, aber Ihre Frustration entsteht, wenn Sie versuchen, ihn wie andere Motoren zu verwenden, wenn er nicht wie andere Motoren ist. Schauen Sie sich mein Profil für eine Schulung an. Ich habe einen Link für eine kostenlose Testversion hinzugefügt, damit Sie nicht bezahlen müssen.

MichaelHouse
quelle
Beeindruckend. Mein Wissen über die Einheit hat sich nur um eine Tonne erhöht :) Das macht tatsächlich sehr viel Sinn. Ich habe noch nie von Fertighäusern gehört. Vielen Dank für Ihre Hilfe :)
dimitris93
Außerdem habe ich gerade angefangen, deine Tutorials
anzuschauen
@Shiro Vielleicht möchten Sie zuerst die grundlegenden durchsuchen, um Ihr Verständnis von Unity-Objekten, -Komponenten, Fertighäusern usw. zu festigen. Beachten Sie auch das GUI-Kapitel meines Kurses :( es ist veraltet.
MichaelHouse
1
Klingt nach einer neuen Frage für die Site, nicht nach den Kommentaren.
MichaelHouse
1
Diese Antwort sollte auf der ersten Seite der Unity-Dokumente abgedruckt werden.
Easwee