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> 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];
3 Réponses :
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 P> < 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 ). P>
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: p> (remarquez comment vous n'incluez pas le dossier Ressources et l'extension du sprite) P> Vous pouvez trouver Plus de détails dans le Chargement de ressources à l'exécution Documentation. P> Cast PPTR a échoué lorsque la déséroférance! p>
BlockQuote> J'ai fait des recherches et découvertes de P> 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. P> p>
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); }
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. P>