前几天由于项目原因,做了一个自动根据模型自动创建动画状态机,然后紧接着做了根据动画状态机和模型一键制作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. 100-days: twenty-eight

    Title: Lawrence Ferlinghetti's(劳伦斯·费林盖蒂) enduring San Francisco(旧金山) 劳伦斯·费林盖蒂心中的旧金山,历久弥新 费林盖蒂:美国垮掉的一 ...

  2. Python中日期和时间格式化输出的方法

    本文转自:https://www.jb51.net/article/62518.htm 本文实例总结了python中日期和时间格式化输出的方法.分享给大家供大家参考.具体分析如下: python格式化 ...

  3. 【Spring学习】Spring的源码解析之路

    缘起:=====>>>> 在项目中实际上是用到了Spring的内容,只是直接用的SpringBoot,不管是Eclipse中还是在Intellig IDEA中,应该都比较容易能 ...

  4. python入门day01

      一.编程和编程语言 电脑的基本原理: #计算机通过高低电流表示二进制数的1和0,所以计算机识别的是电压的高低,准确地说是用电压表示的各种数据,即数字信号;其他的物理量必须通过传感器等设备转换成数字 ...

  5. mkfs.ext4快速格式化大容量硬盘

    安装ext4: yum -y install e4fsprogs 使用如下命令可以快速格式化大容量硬盘: mkfs.ext4 -T largefile /dev/xxx

  6. python 将mysql数据库中的int类型修改为NULL 报1366错误,解决办法

    gt.run_sql()是用pymysql 封装的类 distribution_sort_id type: int目的:将此字段值全部修改为NULL g=2gt.run_sql("updat ...

  7. oracle异机恢复参考官方文档

    How to use Rman Duplicate on ASM/RAC/OMF/Single Instance (Doc ID 840647.1) How to perform Rman dupli ...

  8. 3,postman的变量写法和collection

    1,环境变量和全局变量的添加和引用 pm.globals.get("variable_key");可以引用环境变量 2,collection的使用 当在tests中使用文件变量的时 ...

  9. Linux 安装源码软件

    linux下,源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install) 过程中用到configure --prefix  --with:其中--pr ...

  10. sqlserv 配置 CLR

    转载地址:http://www.cnblogs.com/Brambling/p/8000911.html   //clr 配置 https://docs.microsoft.com/zh-cn/sql ...