Sprites de dessin 2D Unity 5 par programmation

8

Comment puis-je dessiner des sprites dans Unity 5 par programme? Je cherche quelque chose de similaire à spriteBatch.Draw()XNA. Les résultats que j'obtiens lorsque je recherche à ce sujet sont soit http://wiki.unity3d.com/index.php?title=SpriteManager obsolètes (cela a été écrit en 2012), soit ils sont effectués à l'aide de l'interface de l'unité. Tout ce que je peux trouver est une Spriteclasse dans UnityEngine.dll. Est-ce ce dont j'ai besoin? Comment le dessin fonctionnerait-il? Je ne comprends vraiment pas.

dimitris93
la source
Que voulez-vous dire par dessiner des sprites? Vous voulez dire les rendre à l'écran ou créer dynamiquement l'image représentée par le sprite?
MichaelHouse
@ Byte56 rend une image 2D à l'écran, comme tous les moteurs de jeux 2D que j'ai vus. Je ne sais pas pourquoi cela semble si difficile à trouver lorsque vous effectuez une recherche dans Google. J'ai besoin de quelque chose comme spriteBatch.Draw (SpriteSheetName, position, Rectangle, origine, échelle, rotation) où le rectangle définit la partie de la feuille de sprite que j'essaie de dessiner. J'essaie maintenant de faire cela en faisant un Spritepuis un SpriteRenderermais je ne peux pas comprendre comment définir une image sur l'image-objet.
dimitris93
@ Les Spriteobjets Byte56 ne semblent même pas avoir de propriété pour définir l'image. la chose la plus proche que je vois est sprite.texture qui est en lecture seule ... en fait, chaque propriété de sprite est en lecture seule
dimitris93

Réponses:

16

Unity n'a pas ce type de rendu en "mode direct", vous n'appelerez Drawaucune boucle de mise à jour pour Unity.

Dans Unity, vous devez créer un objet de jeu, puis attacher des scripts à cet objet de jeu. Ces scripts contrôleront le comportement de l'objet, si et comment il est affiché à l'écran, s'il fait partie du système physique, etc.

Pour créer un nouveau sprite à dessiner à l'écran, vous devrez créer un nouvel objet de jeu, puis y attacher le script SpriteRenderer et définir son sprite.

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

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

Cela suppose une structure de répertoires de

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

Par exemple:

entrez la description de l'image ici

Ensuite, vous aviez un script différent pour changer la position, la rotation, etc., selon la façon dont vous voulez qu'il se comporte.

La façon la plus simple d'accomplir tout cela sans avoir à écrire autant de code? Créez d'abord l'objet de jeu dans l'éditeur Unity. Une fois que l'objet de jeu est équipé du sprite que vous voulez et des scripts de comportement et tout ça. Faites-le glisser et déposez-le dans un répertoire de ressources. Cela crée un préfabriqué. Les préfabriqués sont exactement ce à quoi ils ressemblent, des préfabrication. Ce sont des objets complets que vous pouvez ensuite référencer et créer à la volée.

Vous créeriez ceux comme:

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

Cela engendrera un clone du préfabriqué que vous avez créé auparavant. Donc, si par exemple, vous aviez donné à votre préfabriqué le comportement de se déplacer vers le joueur et d'attaquer, chaque fois que vous générez un nouveau préfabriqué de ce type, il commencera à se déplacer vers le joueur et à attaquer. Les scripts que vous n'aviez à écrire qu'une seule fois contrôlent tous ces objets de jeu.

Je pense que la principale différence que vous voyez ici est l'utilisation intensive de composants. Ce que vous n'avez probablement pas vu dans d'autres moteurs de jeu comme XNA. L'unité est vraiment un moteur puissant, mais votre frustration vient d'essayer de l'utiliser comme d'autres moteurs, alors que ce n'est pas comme les autres moteurs. Consultez mon profil pour une formation, j'ai ajouté un lien pour un essai gratuit afin que vous n'ayez pas à payer.

MichaelHouse
la source
sensationnel. ma connaissance de l'unité vient d'augmenter d'une tonne :) cela a beaucoup de sens en fait. Je n'ai jamais entendu parler de préfabriqués auparavant. merci beaucoup pour votre aide :)
dimitris93
aussi je viens de commencer à regarder vos tutoriels: D
dimitris93
@Shiro Vous pouvez parcourir les base d' abord, pour consolider votre compréhension des objets Unité, composants, etc., prefabs aussi, ne me dérange pas le chapitre GUI de mon cours :( il est obsolète.
Michaelhouse
1
Cela ressemble à une nouvelle question pour le site, pas aux commentaires.
MichaelHouse
1
Cette réponse doit être imprimée sur la première page des documents Unity.
easwee