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配置文件,重新设置能够 ...
随机推荐
- X86保护模式 八操作系统类指令
X86保护模式 八操作系统类指令 通常在操作系统代码中使用,应用程序中不应用这些指令 指令分为三种:实模式指令,任何权级下使用的指令.实模式权级0下可执行的指令和仅在保护模式下执行的指令 一 实模 ...
- java作业 4
public class dog { /** * @param args */ public static void main(String[] args) { // TODO Auto-gen ...
- ZOJ-3956 Course Selection System,01背包!
Course Selection System 比赛的时候最后20分钟想到了是01背包,奈何没时间推出怎么背. 题意:n门课程,每门课程都有一个h值和c值,现在给出一个happy的定义,所选的课程的h ...
- [BZOJ3585][BZOJ3339]mex
[BZOJ3585][BZOJ3339]mex 试题描述 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 输入 第一行n,m.第二行为n个数.从 ...
- django无法同步数据库 Error loading MySQLdb module: No module named ‘MySQLdb‘
最近在学习Python,打算先看两个在线教程,再在github上找几个开源的项目练习一下,在学到“被解放的姜戈”时遇到django同步数据库时无法执行的错误,记录一下. 错误现象: 执行python ...
- 最短Hamilton路径-状压dp解法
最短Hamilton路径 时间限制: 2 Sec 内存限制: 128 MB 题目描述 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamil ...
- maven打包加入依赖包以及加入本地依赖包的方法
Maven引入本地Jar包并打包进War包中 1.概述 在平时的开发中,有一些Jar包因为种种原因,在Maven的中央仓库中没有收录,所以就要使用本地引入的方式加入进来. 2. 拷贝至项目根目录 项目 ...
- net5:Theme主题样式的动态变换,在内容页content中操作影响模板页的操作
原文发布时间为:2008-07-29 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+. 一.错误发生情景: 在安装gcc时,执行.c ...
- svn不是内部或外部命令?
svn不是内部或外部命令? 我的系统是Win7, [计算机]-->右键[属性]-->[高级系统设置]-->[环境变量]-->[系统变量 (S)]-->[Path]--&g ...