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载入外部图片文件的更多相关文章
- AJAX载入外部JS文件到页面并让其执行的方法(附源码)
一. 向HTML页面中动态添加JS文件(从外部载入)并让其执行的两种方法 1.只适用于IE浏览器的简单方法: 先在文档中放置一张JS"空床"并添加ID:<script id= ...
- cocos2d js 怎样动态载入外部图片
官网没有详细样例,仅仅有看api,研究成果例如以下 var that = this; var url = "http://xxxxxx"; cc.loader.loadImg(ur ...
- 延迟加载外部js文件,延迟加载图片(jquery.lazyload.js和echo,js)
js里一说到延迟加载,大都离不开两种情形,即外部Js文件的延迟加载,以及网页图片的延迟加载: 1.首先简单说一下js文件的3种延迟加载方式: (1)<script type="text ...
- Unity加载外部图片
在这里记录一下在 Unity3D 中分别使用 WWW 和 IO 流加载外部图片 使用 WWW 加载 /// <summary> /// 使用 WWW 加载图片,并赋值给 _rawImage ...
- 用DllImport引用的外部DLL文件如何通过clickonce发布
在.net中非托管代码或非COM组件的外部DLL文件只能用DllImport的方式使用,但是在clickonce方式发布时不会自动包含到发布清单中去,办法是在项目中先把外部DLL文件作为普通文件添加进 ...
- 关于用Max导出Unity3D使用的FBX文件流程注解
原地址:http://hi.baidu.com/phpstyle/item/c167a4c0694670b10d0a7b87 关于用Max导出Unity3D使用的FBX文件流程注解(转载) (2011 ...
- [转帖]在RDLC中使用外部图片
原文链接:http://blog.csdn.net/rock870210/article/details/4559962 在RDLC中使用外部图片 2009-09-16 19:08 3416人阅读 评 ...
- 利用COM组件IPicture读取jpg、gif、bmp图片文件数据和显示图片
1.读取图片数据 函数原型:bool LoadImage(const char *pName, unsigned char *pBitData); 函数功能,读取pName指向的图片文件的位图数据 b ...
- Struts2图片文件上传,判断图片格式和图片大小
1. 配置Struts2能够上传的最大文件大小 使用Struts2进行文件上传的时候,Struts2默认文件大小最大为2MB,如果要传大一点的文件,就需要修改struts.xml配置文件,重新设置能够 ...
随机推荐
- day01_08.三大控制结构
编程三要素:变量,运算,控制 控制: 有选择性的控制让你某部分代码执行,某部分不执行,或者来回反复执行某段代码 控制的三种基本机构:顺序,选择,循环 1.顺序 程序从上到下,顺序执行 <?php ...
- day03_09 编码部分历史及文件编码简介
详细课件:http://www.cnblogs.com/alex3714/articles/5465198.html 字符编码 支持中文的第一张表就是GB2312 1980 gb2312 6700+ ...
- jquery源码区块
- [git 学习篇]删除文件
1 现在本地文件管理器删除了readme.txt(这个readme.txt已经在创库存在的) rm -rf readme.txt 2 此时git status查看 $ git status # On ...
- 清除Jquery动画的队列
当我们在写页面效果时,有时希望当鼠标放到某个元素上,这时会有动态的效果,当鼠标移出时效果会消失.但实际中,如果快速的用鼠标指向元素并移出,反复几次.即便鼠标不再指向这个元素,但这个元素会不停的重复着动 ...
- 如何使用Python的logging模块
几个学习连接: Python官方链接: https://docs.python.org/3.4/library/logging.html?highlight=logging 翻译(不过是2.3版本的) ...
- java面试题之select、poll和epoll的区别
消息传递方式: select:内核需要将消息传递到用户空间,需要内核的拷贝动作: poll:同上: epoll:通过内核和用户空间共享一块内存来实现,性能较高: 文件句柄剧增后带来的IO效率问题: s ...
- web 工程中利用Spring的 ApplicationContextAware接口自动注入bean
最常用的办法就是用 ClassPathXmlApplicationContext, FileSystemClassPathXmlApplicationContext, FileSystemXmlApp ...
- Linux 系统自动备份数据库及定时任务的设置
首先想到数据库的自动备份,由于涉及业务原因需要在每天固定的时间去调用方法执行备份.如果不考虑业务要求,只考虑实现的话可以通过Linux系统提供的定时任务去完成备份操作. 本文讲的就是利用Linux系统 ...
- C语言实现DES算法
原文转自 http://www.cnblogs.com/imapla/archive/2012/09/07/2674788.html 用C语言实现DES(数据加密算法)的一个例子,密文和密钥都是8个字 ...