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

    修改全局变量 name = 'jason' def change_name(): global name name = 'Jason'

  2. eleTree树形插件引入

    先放一个效果 @eleTree插件官网 刚开始用的xtree,不知为何总是达不到效果,不得已从layui官网插件中寻得这个eleTree插件,看着还不错,用法也简单.不过还是有点坑需要大家注意 开始使 ...

  3. AutoMapper 忽略某个字段

    以前要在定义中忽略 Mapper.CreateMap<Source, Destination>() .ForMember(dest => dest.SomeValuefff, opt ...

  4. angular中文文档的滚动条样式

    个人感觉angular中文文档的滚动条样式非常棒,于是乎就扒了下来 https://www.angular.cn/ body::-webkit-scrollbar { /* 定义了滚动条整体的样式 * ...

  5. python中的列表及numpy数组排序

    一.列表排序  # python中对列表排序有sort.sorted两种方法,其中sort是列表内置方法,其帮助文档如下:In [1]: help(sorted) Help on built-in f ...

  6. Java 调用执行其他语言的程序

    以 Java 调用 Python 为例 1. 使用 Runtime 类 该方式简单,但是增加了 Java 对python 的依赖,需要事先安装python,及python程序依赖的第三方库 Runti ...

  7. Linux任务计划命令 :crontab -e

    crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond ...

  8. 用HTML做登录网页

    <html>  <head> 这里是文档的头部 ... ... ...<title>定义文档标题...</title> </head> &l ...

  9. MFC改变坐标系

    1.在MainFrm中的PreCreateWindow中设置默认窗口大小 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !C ...

  10. Java集合不能存放基本数据类型

    Java集合不能存放基本数据类型,只能存放对象的引用. 每个集合元素都是一个引用变量,实际内容都存放在堆内或方法区里面, 但是基本数据类型是在栈内存上分配空间的,栈上的数据随时会被收回. 如何解决? ...