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

    查看代码,有5个stage,一一解决掉就能愉快看到flag了. 第一个stage: 解决方案: 第二个stage: 解决方案: 使用了os.pipe()函数功能,os.pipe()用于创建一个管道,返 ...

  2. WebSocket 实现链接 发送消息

    Websocket 原理浅析地址: https://www.cnblogs.com/yuanyongqiang/articles/10457793.html 直接上代码: myWebSocket.py ...

  3. 在MyEclipse中搭建spring-boot+mybatis+freemarker框架

    一.创建项目 1.右键-->New-->Project... 2.选中Maven Project,点击next 3.选中第一个 4.添写Group Id,Artifact Id,选择Com ...

  4. Top值

    业务开发中经常会用到元素或者浏览器窗口的各种top值,最近开发组件的过程中也遇到各种问题,因此决定好好总结一下. 常见的top值 scrollTop Element.scrollTop 属性可以获取或 ...

  5. What is REST API

    What is REST REST is acronym for REpresentational State Transfer. It is architectural style for dist ...

  6. 安装composer Failed to decode zlib stream 问题解决方法

    https://getcomposer.org/download/ 页面下载最新版本 composer.phar 放到php.exe 页面下.创建一个.bat文件,存入下面内容 @ECHO OFF p ...

  7. 【Selenium】【BugList8】126邮箱定位不到“退出”按钮:Message: TypeError: can't access dead object

    [流程描述] 登录126邮箱,退出 [代码] #coding=utf-8 from selenium import webdriver driver = webdriver.Firefox() #dr ...

  8. Transform(变换)—Y轴lable内容旋转

    <!DOCTYPE html> <html> <head> <style> div{ border:1px solid; } .bb{ position ...

  9. Oracle中特殊的变量类型

    1.%TYPE 允许用户动态地将数据库中某一列的数据类型与PL/SQL中某个变量关联.语法如下: variable_name table.column%TYPE   2.%ROWTYPE 允许用户定义 ...

  10. mysql 数据库链接 过期产品

    注意下面的"@" 必须要加的!否则会报错! $link = @mysql_connect('localhost','root','root') or die("link ...