Wie 2D-RPG-Spiele Avatar-Sprites mit verschiedenen Gegenständen und Rüstung anpassen

Es ist eine alte Post, aber wenn jemand braucht noch etwas zu gehen weg von. Ich konnte die LPC-Zeichen erhalten, dynamisch zu animieren.

Die Animation vs Bewegungsgeschwindigkeit ist etwas abseits, aber mein Fokus auf dynamischem Rendering gewesen, statt der Animation / Bewegung synchron zu sein. Sie können das zwicken.

Ich bin neu in der Einheit und Game Development im Allgemeinen, so hoffentlich habe ich die Dinge richtig, aber ich habe die folgende Vorgehensweise:

Struktur spritesheets in Ordnern ein Format / DNAType / Geschlecht / Modell, wo die DNAType kann alles von Körper, Kopf, Hände, zu Fuß, usw. (Sie definieren diese im DNABlockType Skript und alles geschieht sonst wie Magie. (Na ja, Sprites muß in der richtigen Ordnerstruktur sein, und ATM dies unterstützt nur den riesigen Fuß, verletzt, schießt, Schrägstrich-Tabelle)

Zu Beginn einer Szene, laden alle möglichen Sprites in AnimationDNABlock Objekte, wobei jeder Block ein Modell / Regie / Aktion sowie alle zugehörigen Sprites darstellt. Zum Beispiel könnte die richtige männliche Plattenpanzer „schießen“ Aktion in einem einzigen Block gespeichert werden, mit einer Liste von body_male_platemail_sh_r_0 - body_male_platemail_sh_r_7 Sprites. Preload alle AnimationDNABlocks in Caches.

Nachdem die Animationen geladen werden, bevölkern ich ein „CharacterDNA“ Objekt, das bis CharacterDNABlocks gemacht wird. Diese Blöcke halten einfach den „Modellschlüssel“ und die Farbkonfiguration des Zeichens. Aktualisieren Sie ihre Werte zu Beginn der Szene und lassen Sie die PlayerController den Rest erledigen. Dies unterscheidet sich von den AnimationDNA / Blöcke in Schritt 3 genannten Diejenigen, verwendet werden, um die eigentliche Animation zu machen. Die CharacterDNA stellt einfach das Rennen / Geräte / Haar / etc. ein Zeichen.

Die AnimationRenderer wird jeder jeden AnimationDNABlock schauen. überprüfen, ob es aktiviert ist, und wenn ja, aktualisieren Sie es Gameobject der SpriteRenderer Komponente mit dem AnimationDNABlock Sprite zugeordnet ist (das aktuelle Bild für den Index verwendet!). Darüber hinaus aktualisieren Sie die Materialfarbe SpriteRenderer.

Ich erklärte, wahrscheinlich zu viel, aber das größte Problem, das ich sehe nach vorne geht, ist, dass ich 21 DNATypes haben, und ich möchte mehr hinzuzufügen. Ich weiß nur nicht, wie das wird skaliert, wenn ich hinzufügen sollte. 50 Zeichen auf den Bildschirm.

Danke fürs klarstellen; Ich glaube, ich verstehe, was Sie für ein wenig besser jetzt gehen.

Sie würden nicht die Sprite-Blätter im Voraus wissen müssen; sie können dynamisch eine Textur / Bilddatei und eine gewünschte z-Ordnung (das wie es klingt durch LPC Konvention definiert ist) gegeben erstellt werden.

(Quick beiseite von der Art und Weise: einige der Klassen, die Sie im Code verwenden geschrieben oben (AssetDatabase, EditorUtility, wahrscheinlich TextureImporter) sind Redakteur nur und wird nicht kompiliert, wenn ein Build machen Sie werden die WWW-Klasse mit der Verwendung müssen. file: // Protokoll statt)

Wenn Sie besorgt über die Speichernutzung sind, kann ich garantieren, dass mehr Speicher verwendet wird, wenn jedes Zeichen eine Person hat, benutzerdefinierte spritesheet Textur statt viele spritesheets weitergeben, die dann durch ein paar zusätzliches Kind Gameobjects referenziert werden. Während ein wenig CPU-Auslastung pro Frame durch weniger Unentschieden Anrufe gespeichert werden würde, ist es wahrscheinlich nicht wert, vor allem einer Textur seit Wiederaufbau jedes Mal, wenn ein Charakter ausstattet oder unequips etwas CPU-intensiv sein wird.

Oh Mann zach.r.d - ich wusste nicht, dass der UnityEditor nicht gebaut werden kann :( Ich habe es funktioniert genau so, wie ich wollte Vielen Dank für Ihre Zeit, die Sie so viel beantworten.!

Animator verwendet, wird mit Mecanim, es funktioniert bereits mit 2d. )

Unter der Annahme, den Charakter einer Gameobject ist, und jedes seiner Sprite „Schichten“ sind auf separaten Gameobjects unter dem Zeichen parented gibt es zwei Strategien. Eine davon ist ein Animator auf den Spieler zu haben, die alle die Sprites darunter steuert, aber ich bin nicht wirklich sicher, wie möglich, das ist. Die andere ist, jedes Kind haben Gameobject seinen eigenen Animator haben, und haben dann ein Skript auf dem Gameobject Charakter, dass sie alle Anrufe, wann immer Sie tun SetBool, SetFloat usw.

Mehrere Animateuren scheint, wie die Art und Weise zu gehen. Ich werde versuchen, dass!

Ich bin nicht zu 100% bereit, dynamische Belastung, wenn Sprites zu verlassen. Zumindest verstehe ich, wie baut und Asset-Verpackung funktioniert jetzt. Danke für Ihre Hilfe.