Comment les Jeux RPG 2D personnaliser avatar sprites avec différents objets et armures
Il est un ancien poste, mais si quelqu'un a besoin encore quelque chose à partir de. Je suis en mesure d'obtenir les personnages pour animer dynamiquement LPC.
L'animation vs vitesse de déplacement est un peu loin, mais mon accent a été mis sur le rendu dynamique plutôt que l'animation / mouvement étant synchronisé. vous pouvez modifier cela.
Je suis nouveau à l'unité et le développement du jeu en général, si tout va bien je l'ai fait les choses correctement, mais je pris l'approche suivante:
Structure spritesheets dans des dossiers en utilisant un format de / DNAType / genre / modèle où l'DNAType peut être quelque chose de corps, la tête, les mains, aux pieds, etc. (Vous définissez ces derniers dans le script DNABlockType et tout se passe d'autre comme par magie. (Eh bien, sprites doivent être dans la bonne structure de dossier et ATM ce ne supporte que la marche géante, mal, tirer, barre oblique tableur)
Au début d'une scène, chargez tous les sprites possibles en objets AnimationDNABlock, chaque bloc représente un modèle / Direction / Action, ainsi que tous les sprites associés. Par exemple, le droit platemail action « shoot » mâle pourrait être stocké dans un seul bloc, avec une liste des body_male_platemail_sh_r_0 - sprites body_male_platemail_sh_r_7. Précharger tous AnimationDNABlocks dans les caches.
Après les animations sont chargées, je remplir un objet « CharacterDNA » qui est composé CharacterDNABlocks. Ces blocs simplement tenir la « clé du modèle » et la configuration de couleur du caractère. Mettre à jour leurs valeurs au début de votre scène et de laisser la PlayerController gérer le reste. Ceci est différent des AnimationDNA / blocs mentionnés à l'étape 3. Ceux-ci sont utilisés pour rendre l'animation réelle. Le CharacterDNA représente simplement la course / équipement / cheveux / etc. d'un caractère.
Le AnimationRenderer regardera à travers chaque chaque AnimationDNABlock. vérifier si elle est activée, et si oui, mettre à jour est la composante associée de SpriteRenderer de gameobject avec le sprite AnimationDNABlock (en utilisant le cadre actuel de l'indice!). En outre, mettre à jour la couleur du matériau SpriteRenderer.
J'explique sans doute trop, mais le plus gros problème que je vois l'avenir est que j'ai 21 DNATypes et je voudrais ajouter plus. Je ne sais pas comment cela s'adapteront si je devais ajouter. 50 caractères sur l'écran.
Merci de clarifier; Je pense que je comprends ce que vous allez un peu mieux maintenant.
Vous ne devriez pas savoir à l'avance les feuilles de sprite; ils pourraient être créés dynamiquement donné une texture / fichier d'image et un ordre z souhaitée (qui sonne comme il est défini par convention LPC).
(Rapide de côté par la voie: quelques-unes des classes que vous utilisez dans le code affiché ci-dessus (AssetDatabase, EditorUtility, probablement TextureImporter) sont rédacteur seulement et ne compilera pas lors d'un build Vous aurez besoin d'utiliser la classe WWW avec le. protocole file: // à la place)
Si vous êtes préoccupé par l'utilisation de la mémoire, je peux vous garantir que plus la mémoire sera utilisée que si chaque personnage a une personne, texture spritesheet personnalisée au lieu de partager de nombreux spritesheets qui sont ensuite référencés par quelques GameObjects enfants supplémentaires. Alors qu'un peu d'utilisation du processeur serait sauvegardé par image en raison de moins d'appels de tirage, il est sans doute pas la peine, d'autant plus que la reconstruction d'une texture à chaque fois un personnage ou équipe déséquipe quelque chose va être CPU-intensive.
Oh zach.r.d homme - je ne savais pas que le UnityEditor ne pouvait pas être construit :( je devais fonctionner exactement comme je le voulais Merci de prendre le temps que vous répondez tant.!
L'utilisation Animator utilise Mecanim, il travaille déjà avec 2d. )
En supposant que le personnage est un gameobject, et chacun de ses sprites « couches » sont sur GameObjects séparées parented sous le caractère, il y a deux stratégies. L'un est d'avoir un Animator sur le lecteur qui contrôle tous les sprites en dessous, mais je ne suis pas vraiment sûr de savoir comment est possible que. L'autre est d'avoir chaque enfant gameobject avoir son propre animateur, puis un script sur gameobject du personnage qui appelle tous à chaque fois que vous faites SetBool, SetFloat, etc.
animateurs multiples semble que le chemin à parcourir. Je vais essayer!
Je ne suis pas 100% prêt à abandonner le chargement dynamique si sprites. Au moins, je comprends comment construit et conditionnement d'actifs fonctionne maintenant. Merci de votre aide.