Unity3d加载外部图片文件

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;
    }
}




你可能感兴趣的:(unity3d)