Wie zeichne ich manuell einen Teil eines Sprite-Blatts?

9

Ich arbeite in Unity und stelle fest, dass der Animator in meinem 2D-Spiel nicht für das arbeitet, was ich versuche. Ich möchte eine bestimmte Animation mithilfe von Sprite-Blättern erstellen und dieselbe Animation mit anderen Sprites wiederverwenden können, die von Zellen dieselbe Größe und gleiche Abmessungen haben. Nach einigen Recherchen finde ich, dass es unmöglich ist.

Stattdessen versuche ich, mein eigenes Animationsskript zu erstellen, aber ich verstehe nicht, wie ich Unity anweisen soll, nur einen Abschnitt des Sprites zu zeichnen. So etwas wie in XNA, wo Sie nur ein bestimmtes Rechteck eines Sprites mithilfe von Start- und Endkoordinaten rendern können.

Wie zeichne ich manuell einen Teil eines Sprite-Blatts?

Shaun
quelle
3
Dies ist in Unity möglich, ohne die Animationsdaten mit einem kleinen Hack zu duplizieren. Tatsächlich spielen Sie Animation A mit Spritesheet A ab und tauschen dann in LateUpdate das SpriteRenderer-Sprite gegen das Analog aus Spritesheet B aus. Zu dieser Technik gab es ein Unity-Video. Ich werde es als Antwort veröffentlichen, wenn ich es später finden kann, und die Details näher erläutern. Auf diese Weise können Sie die volle Leistung des nativen Animationssystems von Unity nutzen, ohne Ihre eigenen von Grund auf neu schreiben zu müssen.
DMGregory
Sie sollten Spine oder eine andere Skelettanimationssoftware ausprobieren. Es verfügt über eine Skins-Funktion, mit der Sie dieselben Knochenanimationen beibehalten, aber Skins nach Bedarf austauschen und ändern können. Ich persönlich benutze Spine, weil es einfach ist, es gibt Tutorials und eine Unity-Laufzeit, die alles super einfach macht. Der Nachteil ist, dass es Geld kostet, aber die Basisversion bietet Ihnen alles, was Sie zum Erstellen von Animationen benötigen. Die Pro-Version macht es einfach einfacher und schneller.
Savlon
Verwenden Sie Masken, wenn Sie an der Benutzeroberfläche arbeiten
virtouso

Antworten:

1

Ich denke, es kann einen einfacheren Ansatz geben, bei dem Sie dies tun und trotzdem Unity Mecanim für die Animation verwenden können.

Schritte:-

1) Sie können dem Bild programmgesteuert 2D-Textur-Sprites zuweisen. Da es sich um ein Raster handelt, ist dies nicht sehr schwierig. In der folgenden Antwort hat der Benutzer seinen eigenen Sprite-Slicer erstellt und im Verzeichnis gespeichert (optional, sonst speichern Sie ihn einfach in einer Variablen). Sie brauchen nicht den gesamten Code, überprüfen Sie einfach die GetSprites () -Funktion und Sie werden auf die Idee kommen :)

http://answers.unity3d.com/questions/576799/coding-my-own-auto-slicer-getting-islands-of-pixel.html

2) Wenn Sie dazu in der Lage sind, pflegen Sie ein Array von Sprites, das Sie aus Schritt 1 erhalten haben.

3) Jetzt müssen Sie eine Animationsdatei dieser Sprites erstellen, die in mecanim eingesteckt werden kann. Dazu benötigen Sie die Funktion "Kurve festlegen" von Unity (überprüfen Sie den unten angegebenen Link). Sobald Sie den Clip haben, können Sie ihn für die zukünftige Verwendung speichern oder nur in einer Variablen für die aktuelle Spielinstanz speichern.

http://docs.unity3d.com/ScriptReference/AnimationClip.SetCurve.html

Hoffe das löst deinen Zweifel :)

Hash Boje
quelle