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





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM