12
votes

Unity 4.3 - 2D, comment attribuer des sprites programmatiquement à un objet

J'essaie de créer un objet qui sera responsable de la création et de la présentation de sprites différents, je voudrais donc accéder directement aux actifs / sprites programmatiquement au lieu de glisser et de déposer une sprite dans la hiérarchie sous cet objet.

Il y a un moyen de créer de manière programmable un nouveau sprite et d'assigner ce que j'ai dans le dossier d'actifs? p>

J'aimerais aussi avoir une sorte de structure de données avec quelques images chargées au début du jeu, un tableau ou un dictionnaire ou quelque chose comme ça afin que je puisse changer en fonction de la situation que les images que j'ai besoin de montrer. Mais ce qui me confond depuis que je suis nouveau à l'unité, c'est comment créer un sprite en prenant la référence au Sprite par programme à l'aide du dossier d'actifs. P>

Modifier avec progrès: P>

J'ai créé un tableau de sprites comme celui-ci: p> xxx pré>

dans l'unité J'ai ajouté des sprites à l'intérieur du tableau manuellement (je viens de faire glisser les pngs à l'intérieur du tableau de variables) donc dans cet objet i avoir un composant avec ce tableau rempli de sprites p>

à l'intérieur du composant, je l'ai également fait: P>

public SpriteRenderer renderer;
renderer = transform.GetComponent<SpriteRenderer>();
renderer.sprite = (Sprite)mySprites [0];


0 commentaires

3 Réponses :


13
votes

Pour créer un Sprite de manière programmatique peut être un peu trop difficile à faire. Vous auriez probablement besoin de créer une texture en mémoire, de remplir les données, puis d'écrire cette texture sur le disque. Après cela, vous devriez pouvoir lire cela en utilisant le fichier C # ou le www.loadfromcaredownload .

Voici comment vous créeriez une texture de manière dynamique: http://answers.unity3d.com/questions/9919/how-do--create-a-texture-dynamiquement-in-unity.html < HR>

Pour charger vos sprites Programmatiquement (pas celles créées de manière dynamique), elles doivent être sous un dossier avec le nom Ressources (qui est un dossier spécial ).

IE Supposons que vous ayez un sprite nommé mysprite.png sous un dossier nommé Sprites qui est sous un dossier nommé ressources. Vous le charriez alors comme ceci: xxx

(remarquez comment vous n'incluez pas le dossier Ressources et l'extension du sprite)

Vous pouvez trouver Plus de détails dans le Chargement de ressources à l'exécution Documentation.


Cast PPTR a échoué lorsque la déséroférance!

J'ai fait des recherches et découvertes de Ce forum post Cela se produit généralement lorsque vous avez eu une liste d'un type, puis la modifiait en un autre type. C'est à dire. Si MySprites était à un moment donné GameObject [] et que vous avez lié un groupe de sprites, puis l'a changé en sprite []. Et comme cela dit spécifiquement texture2D, je suppose que les paramètres d'importation de vos sprites (ou certains d'entre eux) sont définis sur la texture au lieu de Sprite:

 Paramètres d'importation Sprite


Aussi, Tous les monobéhaviens ont déjà un champ nommé Renderer , qui est de type rendu . Je vous suggère de renommer ce champ pour éviter toute confusion, à moins que vous ne l'utilisiez que comme exemple.


0 commentaires

1
votes

Voici le code réel .. vous aidera

UI2DSprite[] uiSprites = tmpObject.GetComponentsInChildren<UI2DSprite>();
 Sprite[] sprites = Resources.LoadAll<Sprite>("Textures");
 string resName = "icon_favorite_2";

 foreach (UI2DSprite uiSprite in uiSprites)
 {
 if(uiSprite.name = "icon")
  SetSprite(uiSprite, sprites , resName);

 }


0 commentaires

0
votes

Juste pour jeter ma tuppence. J'avais ce problème lorsque j'ai changé un champ SerializedField de Texture2D en Sprite dans le code. La texture était déjà une sprite dans l'éditeur, mais elle devait être Sprite dans le code. Le champ de l'éditeur a initialement dit le type Mismatch, puis affiché la texture Sprite à nouveau. Pour la guérir, je définis le champ dans l'éditeur sur Aucun et le réinitialisez-le au sprite requis.


0 commentaires