Resourcesフォルダを使うとスクリプトから読み出せますよ。
色々方法はありますが一般的な方法かと思います。ResourcesフォルダはUnity上で特殊な意味を持つフォルダでして、画像に限らずResourcesフォルダ内に入れたものをResources.Loadメソッドでスクリプトから読み出せるというものになります。詳しくはこちらを参照ください-> https://docs.unity3d.com/ja/current/ScriptReference/Resources.html
###使い方説明 下準備
- Resourcesフォルダを適当な場所に制作
- 読み出したい画像を制作したフォルダ内に配置 仮にp1.pngとしておきます。
準備完了
今後も使いそうでしたらわかりやすいようにResources/progressなどのフォルダを作ってその中に入れてもいいと思います。とりあえず今回は入れている程で進めます。
###実装
・画像の配置場所を以下と仮定して進めます。
Resources/progress/p1.png
・Imageコンポーネントはインスペクタから設定すると仮定します
C#
1using UnityEngine;
2using System.Collections;
3using UnityEngine.UI;
4
5public class resourcesManager : MonoBehaviour {
6
7 [SerializeField]
8 Image imgRender;
9 string progressFolder = "progress/";
10
11 void Awake (){
12 //画像の読み出し
13 imgRender.sprite = getSprite(progressFolder + "p1");
14 //画像を破棄
15 imgRender.sprite = null;
16 //メモリ上から破棄 ※この画像に限らず使用していないものはすべてメモリ上から破棄されるメソッドです。
17 Resources.UnloadUnusedAssets();
18
19 //もし画像がスライスされているものなら
20 Sprite[] sprites = getSprites(progressFolder + "p1");
21 imgRender.sprite = sprites[0];
22 }
23
24 public Sprite getSprite(string imgName)
25 {
26 return Resources.Load<Sprite>(imgName);
27 }
28
29 public Sprite[] getSprites(string[] imgName)
30 {
31 Sprite[] sprite = new Sprite[imgName.Length];
32 for(int i = 0; i < sprite.Length; i++){
33 sprite[i] = getSprite(imgName[i]);
34 }
35 return sprite;
36 }
37}
###最後に 結構画像使うアプリならResouces.Loadおすすめです。
インスペクタ上で画像を設定するということは起動直後にメモリ上に展開するということになります。画像自体が軽くてもメモリ上に展開すると数倍〜数十倍の重さになることもあるのでバカにできません。起動直後使用しない画像はスクリプトから読み出したい時以外でもResourcesフォルダの使用をお勧めします。アプリによって効果は様々なので一度画像のメモリ使用量をProfiler上のMemory->Texturesから確認してみてもいいかもしれません。
###Resoucesフォルダの注意点
Unityはビルド時に使用していないものをアプリ内に含まれないようにしますが、Resoucesフォルダ内は例外なので必要無いものを残さないようにご注意ください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/22 09:07
2016/09/22 10:50
2016/09/22 12:15