Comment dessiner manuellement une partie d'une feuille de sprite?

9

Je travaille dans Unity, et je constate que l'animateur ne fonctionne pas pour ce que j'essaie de faire, dans mon jeu 2D. Je veux créer une animation spécifique, en utilisant des feuilles de sprites, et pouvoir réutiliser la même animation avec d'autres sprites qui ont la même taille et les mêmes dimensions par cellules. Après quelques recherches, je trouve que c'est impossible.

Au lieu de cela, j'essaie de créer mon propre script d'animation, mais je ne comprends pas comment dire à Unity de dessiner uniquement une section de l'image-objet. Quelque chose comme dans XNA, où vous pouvez rendre uniquement un rectangle spécifique d'un sprite en utilisant les coordonnées de début et de fin.

Comment dessiner manuellement une partie d'une feuille de sprite?

Shaun
la source
3
Cela est possible dans Unity sans dupliquer les données d'animation, avec un petit hack. En effet, vous jouez l'animation A à l'aide de spritesheetA, puis dans LateUpdate vous permutez chaque SpriteRenderer Sprite à son analogue à partir de spritesheetB. Il y avait une vidéo Unity sur cette technique; Je le posterai comme réponse si je peux le trouver plus tard, et développerai les détails. Cela vous permettra d'utiliser toute la puissance du système d'animation natif d'Unity sans avoir à écrire le vôtre à partir de zéro.
DMGregory
Vous devriez essayer Spine ou un autre logiciel d'animation squelettique. Il a une capacité de skins qui vous permet de conserver les mêmes animations d'os, mais d'échanger et de changer de skins au besoin. Personnellement, j'utilise Spine parce qu'il est simple, il y a des tutoriels et il a un runtime unitaire qui rend tout super simple. L'inconvénient est que cela coûte de l'argent, mais la version de base vous donne tout ce dont vous avez besoin pour faire des animations. La version pro le rend plus simple et plus rapide.
Savlon
utilisez des masques si vous travaillez sur l'interface utilisateur
virtouso

Réponses:

1

Je pense qu'il peut y avoir une approche plus simple dans laquelle vous pouvez le faire, et toujours utiliser Unity Mecanim pour l'animation.

Pas:-

1) Vous pouvez assigner par programme des sprites 2D de texture à partir de l'image, et comme il s'agit d'une grille, il ne sera pas très difficile de le faire. Dans la réponse suivante, l'utilisateur a créé sa propre tranche de sprite et enregistré dans le répertoire (facultatif sinon enregistrez-le dans une variable). Vous n'avez pas besoin de tout le code, vérifiez simplement la fonction GetSprites () et vous aurez l'idée :)

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

2) Une fois que vous êtes en mesure de le faire, maintenez un tableau de sprites, que vous avez obtenu à l'étape 1.

3) Maintenant, vous devez créer un fichier anim de ces sprites qui peut être connecté à Mecanim. Pour cela, vous avez besoin de la fonction Set Curve d'Unity (consultez le lien ci-dessous). Une fois que vous avez le clip, vous pouvez l'enregistrer pour une utilisation future ou simplement l'avoir dans une variable pour l'instance de jeu actuelle uniquement.

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

J'espère que cela résout votre doute :)

Bouée de hachage
la source