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载入外部图片文件的更多相关文章

  1. AJAX载入外部JS文件到页面并让其执行的方法(附源码)

    一. 向HTML页面中动态添加JS文件(从外部载入)并让其执行的两种方法 1.只适用于IE浏览器的简单方法: 先在文档中放置一张JS"空床"并添加ID:<script id= ...

  2. cocos2d js 怎样动态载入外部图片

    官网没有详细样例,仅仅有看api,研究成果例如以下 var that = this; var url = "http://xxxxxx"; cc.loader.loadImg(ur ...

  3. 延迟加载外部js文件,延迟加载图片(jquery.lazyload.js和echo,js)

    js里一说到延迟加载,大都离不开两种情形,即外部Js文件的延迟加载,以及网页图片的延迟加载: 1.首先简单说一下js文件的3种延迟加载方式: (1)<script type="text ...

  4. Unity加载外部图片

    在这里记录一下在 Unity3D 中分别使用 WWW 和 IO 流加载外部图片 使用 WWW 加载 /// <summary> /// 使用 WWW 加载图片,并赋值给 _rawImage ...

  5. 用DllImport引用的外部DLL文件如何通过clickonce发布

    在.net中非托管代码或非COM组件的外部DLL文件只能用DllImport的方式使用,但是在clickonce方式发布时不会自动包含到发布清单中去,办法是在项目中先把外部DLL文件作为普通文件添加进 ...

  6. 关于用Max导出Unity3D使用的FBX文件流程注解

    原地址:http://hi.baidu.com/phpstyle/item/c167a4c0694670b10d0a7b87 关于用Max导出Unity3D使用的FBX文件流程注解(转载) (2011 ...

  7. [转帖]在RDLC中使用外部图片

    原文链接:http://blog.csdn.net/rock870210/article/details/4559962 在RDLC中使用外部图片 2009-09-16 19:08 3416人阅读 评 ...

  8. 利用COM组件IPicture读取jpg、gif、bmp图片文件数据和显示图片

    1.读取图片数据 函数原型:bool LoadImage(const char *pName, unsigned char *pBitData); 函数功能,读取pName指向的图片文件的位图数据 b ...

  9. Struts2图片文件上传,判断图片格式和图片大小

    1. 配置Struts2能够上传的最大文件大小 使用Struts2进行文件上传的时候,Struts2默认文件大小最大为2MB,如果要传大一点的文件,就需要修改struts.xml配置文件,重新设置能够 ...

随机推荐

  1. webdriver高级应用- 禁止Chrome浏览器的PDF和Flash插件

    #encoding=utf-8 from selenium import webdriver # 导入Options类 from selenium.webdriver.chrome.options i ...

  2. 安装adb工包

    下载android sdk (很大) 从D:\AndroidSdk\platform-tools目录可以看到: 将adb工具包: adb.exe,AdbWinapi.dll,AdbWinUSBapi. ...

  3. Wannafly挑战赛11

    就做了两个数学题 链接:https://www.nowcoder.com/acm/contest/73/A来源:牛客网 白兔的分身术 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2 ...

  4. 本博客由CSDN迁移而来,以前的博文可能显示不正常

    如题,原博客地址 http://blog.csdn.net/vicjiao 或点击右侧友链

  5. 算法复习——树形dp

    树形dp的状态转移分为两种,一种为从子节点到父节点,一种为父节点到子节点,下面主要讨论子节点到父亲节点的情况: 例题1(战略游戏): 这是一道典型的由子节点状态转移到父节点的问题,而且兄弟节点之间没有 ...

  6. P3919 (模板)可持久化数组 (主席树)

    题目链接 Solution 主席树水题,连差分的部分都不需要用到. 直接用主席树的结构去存一下就好了. Code #include<bits/stdc++.h> #define mid ( ...

  7. uva 11468 AC自动机+概率DP

    #include<cstdio> #include<cstring> #include<queue> #include<cstdio> #include ...

  8. Codeforces878C. Tournament

    $n \leq 50000$个人,每个人有$K \leq 10$个属性,现对每一个前缀问:进行比赛,每次任意两人比任意属性,小的淘汰(保证同一属性不会出现两个相同的数),最终有几个人有可能获胜. 明显 ...

  9. linux shmget shmctl

    shmgetint shmget(key_t key, size_t size, int flag);key: 标识符的规则size:共享存储段的字节数flag:读写的权限返回值:成功返回共享存储的i ...

  10. 删除指定文件夹下所有的.svn文件夹

      sudo find /目录 -name ".svn" -exec rm -r {} \;