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. 零基础学 HTML5+CSS3 全彩版 明日科技 编著

    第1章 基础知识 1.1 HTML概述 1.1.1 什么是HTML 1.1.2 HTML的发展历程 1.2 HTML文件的基本结构 1.2.1 HTML的基本结构 1.2.2 HTML的基本标记 1. ...

  2. doc下设置永久环境变量的好方法

    http://www-2w.blog.163.com/blog/static/97931518201021211123267/ 需要查看命令具体实现:setx machine “%path%”. 配置 ...

  3. SDOJ 3696 Tree

    描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. 输入 第一行V,E,need分别表示点数,边数和需要的白色边数. 接下来E行 每行 ...

  4. 【转载】logistic回归

    原文地址:https://www.cnblogs.com/zichun-zeng/p/3824745.html 1. logistic回归与一般线性回归模型的区别: (1)     线性回归的结果变量 ...

  5. 《人月神话》读书笔记(2)-week3

    为了确保团队中的每个人都能保持系统概念上的完整性,关于项目的书面规格说明是必不可少的.手册要描绘用户可见的一切,但不应支配实现的过程.光有规格说明也是不够的,会议也是必要的.书中提到的周例会会迅捷地给 ...

  6. iOS UICollectionView高级用法(长按自由移动cell)

    iOS 9之后: 示例如下 效果 前言: 看完你可以学到哪些呢? 就是文章标题那么多, 只有那么多. . 手残效果图没弄好. @property (nonatomic, strong) UIColle ...

  7. 【Luogu】P2657windy数(数位DP)

    题目链接 正式迈入了数位DP的大门…… 心情激动 (看我立个flag,我如果专攻数位DP的话,到wc之前就会有秒数位DP蓝题的能力) 数位DP讲解链接 讲的非常详细,良心博客.比我写的博客加在一起还要 ...

  8. php-超全局变量

    下表列出了您能够在 $_SERVER 中访问的最重要的元素: 元素/代码 描述 $_SERVER[' PHP_SELF '] 返回当前执行脚本的文件名. $_SERVER[' GATEWAY_INTE ...

  9. kb-07线段树--11--区间多重该值多种查询

    /* lazy思想的运用,因为查询多种,如果全记录就太繁了,lazy就是如果该区间的每一个叶子的状态都相同就不用深入下去该值,只要暂时标记下,查询的时候也不用下去,直接计算: */ #include& ...

  10. mysql监控指标

    1.最大连接数监控 show VARIABLES like "max_connections"; //最大连接数 show global status like 'Threads_ ...