unity里的圖片在生成時會壓縮成資源文件,有時客戶想自己放一些圖片用unity顯示,就必須載入外部圖片。
大體思路:用Application.streamingAssetsPath或Application.dataPath來指定存放圖片的相對路徑。用DirectoryInfo獲得目錄。遍歷后FileInfo獲得全部文件,然后推斷后綴名是否為圖片,是的話用www.texture轉為圖片並存入集合。
完整代碼:
using UnityEngine; using System.Collections; using System.IO; using System.Collections.Generic; public class LoadFileImage : MonoBehaviour { //是否顯示圖片 public static bool isShow; //圖片文件路徑集合 List<string> fileName=new List<string>(); //圖片集合 List<Texture2D> textureList=new List<Texture2D>(); public Texture2D close; public Texture2D next; public Texture2D previous; private int mainTexNum; private float sW; private float sH; void Start() { sW = Screen.width; sH = Screen.height; GetAllFile(new DirectoryInfo(UnityEngine.Application.streamingAssetsPath+"/")); GetAllTexture(); } void OnGUI() { GUI.depth = 0; if (!isShow) return; GUI.DrawTexture(new Rect(0, 0, sW, sH), textureList[mainTexNum]); //下一頁 ChangeTexture(next); if (GUI.Button(new Rect(sW / 2 + 20, sH - next.height - 20, next.width, next.height), "")) { if (mainTexNum == textureList.Count - 1) mainTexNum = 0; else mainTexNum += 1; } //上一頁 ChangeTexture(previous); if (GUI.Button(new Rect(sW / 2 - previous.width - 20, sH - previous.height - 20, previous.width, previous.height), "")) { if (mainTexNum == 0) mainTexNum = textureList.Count - 1; else mainTexNum -= 1; } //關閉 ChangeTexture(close); if (GUI.Button(new Rect(sW - close.width - 10, 10, close.width, close.height), "")) isShow = false; } /// <summary> /// 依據文件路徑載入圖片 /// </summary> private void GetAllTexture() { foreach (string s in fileName) { WWW www = new WWW("file://"+s); textureList.Add(www.texture); } } /// <summary> /// 獲得所有圖片文件路徑 /// </summary> /// <param name="info">目錄</param> private void GetAllFile(FileSystemInfo info){ if(!info.Exists) return; DirectoryInfo dir=info as DirectoryInfo; if(dir==null) return; FileSystemInfo[] si=dir.GetFileSystemInfos(); for (int i = 0; i < si.Length; i++) { FileInfo fi = si[i] as FileInfo; if (fi != null) { if (IsImage(fi.Extension)) fileName.Add(fi.FullName); } else GetAllFile(si[i]); } } /// <summary> /// 推斷文件是不是圖片 /// </summary> /// <param name="name">文件名稱</param> private bool IsImage(string name) { string[] imageName = { ".jpg", ".png", ".gif", ".bmp", ".psd", ".tga", ".psd", ".JPG", ".PNG", ".GIF", ".BMP", ".PSD", ".TGA", ".PSD" }; for (int i = 0; i < imageName.Length;i++ ) { if (name.Equals(imageName[i])) return true; } return false; } /// <summary> /// 改變按鈕三種狀態圖片 /// </summary> /// <param name="tex"></param> private void ChangeTexture(Texture2D tex) { GUI.skin.button.normal.background = tex; GUI.skin.button.hover.background = tex; GUI.skin.button.active.background = tex; } }