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;elsemainTexNum += 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;elsemainTexNum -= 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);}elseGetAllFile(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;}
}