前几天由于项目原因,做了一个自动根据模型自动创建动画状态机,然后紧接着做了根据动画状态机和模型一键制作Prefab. 现在因为图片数量或者其它原因需要写一个一键设置图片格式的插件.

至于制作动画状态机和制作预制物体我会在以后的日子给大家贴出我的代码,下面开始进入今天的主题.

需求: 点击文件夹,一键把文件里面的图片全部设置成需要的格式.

思路: 第一步取到文件夹一直下的所有文件,第二步 过滤不是图片的文件, 第三部设置图片格式

思路很简单下面先看一下取出所有文件的代码,思路是利用c#的文件递归的思想进行遍历文件,得到所有文件

    public void CollectModel(Object fold)
{
allControlls.Clear();
string relatepath = AssetDatabase.GetAssetPath(fold);
string folderpath = Path.GetFullPath(relatepath);
CollectAllFiles(folderpath.Replace("\\", "/").Replace(Application.dataPath, "Assets"));
} public void CollectSkinOrAnimator(Object fold)
{
allControlls.Clear();
string relatepath = AssetDatabase.GetAssetPath(fold);
string folderpath = Path.GetFullPath(relatepath);
CollectAnimatorFiles(folderpath.Replace("\\", "/").Replace(Application.dataPath, "Assets"));
}
void CollectAnimatorFiles(string path)
{
string[] localfiles = Directory.GetFiles(path);
string[] dirs = Directory.GetDirectories(path);
for (int i = ; i < localfiles.Length; i++)
{
string filepath = localfiles[i];
if (filepath.Contains(".meta")) continue;
Object obj = AssetDatabase.LoadAssetAtPath<Object>(filepath);
if (!allControlls.Contains(obj))
allControlls.Add(obj);
}
for (int j = ; j < dirs.Length; j++)
{
CollectAnimatorFiles(dirs[j]);
}
} void CollectAllFiles(string path)
{
string[] localfiles = Directory.GetFiles(path);
string[] dirs = Directory.GetDirectories(path);
for (int i = ; i < localfiles.Length; i++)
{
string filepath = localfiles[i];
if (filepath.Contains(".meta")) continue;
if (!IsPicture(filepath)) continue;
Object obj = AssetDatabase.LoadAssetAtPath<Object>(filepath);
if (!allControlls.Contains(obj))
allControlls.Add(obj);
}
for (int j = ; j < dirs.Length; j++)
{
CollectAllFiles(dirs[j]);
}
}

fold 是选中的文件夹,传入进来就会吧所有的文件读取到allControlls中去

接下来看一下过滤图片的方法,上面我已经过滤了.meta文件和文件夹,接下来只需要判断是否是图片即可

还是看代码比较实在

private bool IsPicture(string filePath)
{
try
{
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(fs);
string fileClass;
byte buffer;
buffer = reader.ReadByte();
fileClass = buffer.ToString();
buffer = reader.ReadByte();
fileClass += buffer.ToString();
reader.Close();
fs.Close();
if (fileClass == "" || fileClass == "" || fileClass == "" || fileClass == "")
//255216是jpg;7173是gif;6677是BMP,13780是PNG
{
return true;
}
else
{
return false;
}
}
catch
{
return false;
}
}

代码很简单就是读取文件,如果读取异常则不是图片,如果读取成功则判断文件的头文件是不是图片即可

接下来到了重点,设置图片格式,代码也不是很难

主要是对图片的用途设置,可读可写,是否使用mipmap和压缩格式等

  static void onPreprocessTexture(string path, TextureImportData textureImportData)
{
//自动设置类型;
TextureImporter textureImporter = AssetImporter.GetAtPath(path) as TextureImporter;
textureImporter.textureType = textureImportData.textureImporterType;
textureImporter.textureShape = textureImportData.ShapeType;
textureImporter.isReadable = textureImportData.isReadable;
textureImporter.mipmapEnabled = textureImportData.mipmapEnabled; TextureImporterPlatformSettings settingAndroid = textureImporter.GetPlatformTextureSettings("UNITY_ANDROID");
settingAndroid.overridden = true;
settingAndroid.format = textureImportData.textureImporterFormat; //设置格式
textureImporter.SetPlatformTextureSettings(settingAndroid); textureImporter.SaveAndReimport();
}

发现少了一个关键的模型类,主要用于传数据使用

  public class TextureImportData
{
public TextureImporterType textureImporterType = TextureImporterType.Default;
public bool isReadable = false;
public bool mipmapEnabled = false;
public TextureImporterShape ShapeType = TextureImporterShape.Texture2D;
/// <summary>
/// 图片压缩格式
/// androdi TextureImporterFormat.ETC2_RGB4;
/// ios TextureImporterFormat.PVRTC_RGB4
/// </summary>
public TextureImporterFormat textureImporterFormat = TextureImporterFormat.ETC2_RGB4; }

本人才疏学浅,如有不对欢迎大家指正

Unity一键设置导入图片格式的更多相关文章

  1. UGUI之导入图片之前自动设置图片打包的 tag

    之前一直在用的是NGUI,最近不知怎么突然兴趣来潮,想学习一下UGUI,毕竟,现在纵观Unity的市场,完全是UGUI的天下,NGUI已经渐渐退隐江湖,哈哈哈... 先来记录下,在图片资源导入到Uni ...

  2. IDEA设置导入主题样式皮肤,加入背景图片

    主题下载地址:http://www.riaway.com/theme.php 里面有很多主题,看个人喜好,这里我用的Monokai Sublime Text 3. 导入主题打开IDEA,找到File ...

  3. unity导出工程导入到iOS原生工程中详细步骤

    一直想抽空整理一下unity原生工程导入iOS原生工程中的详细步骤.做iOS+vuforia+unity开发这么长时间了.从最初的小小白到现在的小白.中间趟过了好多的坑.也有一些的小小收货.做一个喜欢 ...

  4. 导入CSV格式的数据

    导入CSV格式的数据 (参见http://dev.mysql.com/doc/refman/5.6/en/load-data.html) 1.数据库表(st_pptn_r) CREATE TABLE ...

  5. unity3d在菜单栏,一键设置Player setting及自动打包并设置apk的存储位置

    项目进行中,领导要求能够进行一键设置Player settings及自动打包并设置apk的位置,所以自己就上网搜索了很多大神的文章.最后是完成了领导需要的功能,在这里记录并分享一下(此项指针对安卓ap ...

  6. FastStone+ImageReady+Kutools plus导入图片到Excel单元格

    先前打算自己做一个也附带训练下,发现有下面方法也好. 1)做帮助文档时需要一种格式(需要将图片导入到Excel中时,假如是按此法归类汇总) 2)FastStone滚动截图       粘贴到Photo ...

  7. Java 给Word每一页设置不同图片水印效果

    Word中设置水印时,可加载图片设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果,如果需要对每一页或者某个页面设置不同的水印效果,则可以参考本文中的方法.下面,将以Java代码为例, ...

  8. Python小游戏——外星人入侵(保姆级教程)第一章 03设置飞船图片 04创建Ship类

    系列文章目录 第一章:武装飞船 03:设置飞船图片 04:创建Ship类--管理飞船行为的类 一.设置飞船图片 1.注意事项 A.将图片设置为位图bmp格式最简单,因为pygame默认加载位图 B.飞 ...

  9. [CSS]textarea设置下划线格式

    功能要求:1:如何实现在多行文本框textarea里面每一行下面都有一条横线  2:textarea文本框里面有一段不能删掉 实现方法:横线用背景图片来做,不动的文字用浮动层+给textarea增加t ...

随机推荐

  1. python day03_ 文件处理

    一.文件操作的基本流程 计算机操作文件的过程 #1. 打开文件,得到文件句柄并赋值给一个变量 #2. 通过句柄对文件进行操作 #3. 关闭文件 1.文件的打开过程 # f被程序持有,文件被操作系统持有 ...

  2. System program tools

    program 描述     RSBDCOS0 执行 OS 命令 (已登录在 SYSLOG 和跟踪文件中)                            

  3. windows下Docker的安装

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

  4. localhost换成127.0.0.1和本机IP打不开本地项目了的问题

    点击桌面右下角的小三角, iis express右键—>显示所有应用程序—>点击网站名称,配置文件路径,找到配置文件,以记事本打开, 按照configuration--system.app ...

  5. vue中v-model 与 v-bind:value

    之前一直认为,v-model相当于下方代码的语法糖,如下: <h1>{{inputValue}}</h1> <input type="text" :v ...

  6. win10+tensorflow+CUDA 心酸采坑之路

    最近准备学习机器学习和深度学习,所以入坑Tensorflow,之前一直使用的是Anaconda3的cpu版本的Tensorflow,但是这次作死一直想用GPU版本的,主要是不想浪费我的1080ti,但 ...

  7. STS中logback.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false ...

  8. 【转】Android总结篇系列:Activity Intent Flags及Task相关属性

    [转]Android总结篇系列:Activity Intent Flags及Task相关属性 同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http:// ...

  9. java日期格式的常用操作

    顾晓北 | 大侠五级 |园豆:9353 | 2016-08-04 16:17     其他回答(1) 0 public class DateUtils extends PropertyEditorSu ...

  10. java反射获取Object的属性和值

    在看反射顺便做个笔记,目前知道的反射的Object都是要有对象的也就是实体Bean. import java.lang.reflect.Field; import java.util.ArrayLis ...