Unity --- 在原目录中,将选中的Texture剥离为rgb和alpha
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System;
using UObject = UnityEngine.Object;
using System.IO; public class lgs
{
[MenuItem("Assets/AlphaSpliter ")]
static void AlphaSpliter()
{
UObject[] objs = Selection.objects;
for (int i = ; i < objs.Length; i++)
{
Texture tex = objs[i] as Texture;
CreateRGBTexture(tex);
CreateAlphaTexture(tex as Texture2D);
}
} static void CreateAlphaTexture(Texture2D src)
{
if (null == src)
throw new ArgumentNullException("src"); //create alpha texture
var srcPixels = src.GetPixels();
var targetPixels = new Color[srcPixels.Length];
for (int i = , iMax = srcPixels.Length; i < iMax; ++i)
{
float r = srcPixels[i].a;
targetPixels[i] = new Color(r, r, r);
} Texture2D alphaTex = new Texture2D(src.width, src.height, TextureFormat.ARGB32, false);
alphaTex.SetPixels(targetPixels);
alphaTex.Apply(); //save alpha texture
string srcPath = AssetDatabase.GetAssetPath(src);
string ext = Path.GetExtension(srcPath);
string newPath = string.Format("{0}{1}{2}", srcPath.Substring(, srcPath.Length - ext.Length), "_alpha", ext);
string fullPath = GetFullPath(newPath);
var bytes = alphaTex.EncodeToPNG();
File.WriteAllBytes(fullPath, bytes); AssetDatabase.SaveAssets();
AssetDatabase.Refresh(); int size = Mathf.Max(src.width, src.height, );
Setting(newPath, size, TextureImporterFormat.ETC_RGB4, TextureImporterFormat.PVRTC_RGB4);
} static void CreateRGBTexture(Texture src)
{
if (null == src)
throw new ArgumentNullException("src"); string srcPath = AssetDatabase.GetAssetPath(src);
string ext = Path.GetExtension(srcPath);
string newPath = string.Format("{0}{1}{2}", srcPath.Substring(, srcPath.Length - ext.Length), "_rgb", ext); AssetDatabase.DeleteAsset(newPath);
AssetDatabase.CopyAsset(srcPath, newPath);
AssetDatabase.ImportAsset(newPath); int size = Mathf.Max(src.width, src.height, );
Setting(newPath, size, TextureImporterFormat.ETC_RGB4, TextureImporterFormat.PVRTC_RGB4);
} static void Setting(string assetPath, int maxSize, TextureImporterFormat androidFormat, TextureImporterFormat iosFormat)
{
var texImporter = AssetImporter.GetAtPath(assetPath) as TextureImporter;
{
texImporter.npotScale = TextureImporterNPOTScale.ToNearest;
texImporter.isReadable = false;
texImporter.mipmapEnabled = false;
texImporter.alphaIsTransparency = true;
texImporter.wrapMode = TextureWrapMode.Clamp;
texImporter.filterMode = FilterMode.Bilinear;
texImporter.anisoLevel = ; //纹理的各向异性滤波水平
texImporter.SetPlatformTextureSettings("Android", maxSize, androidFormat);
texImporter.SetPlatformTextureSettings("iPhone", maxSize, iosFormat);
texImporter.SetPlatformTextureSettings("Standalone", maxSize, TextureImporterFormat.ARGB32);
} AssetDatabase.ImportAsset(assetPath);
AssetDatabase.SaveAssets();
} /// <summary>
/// asset path 转 full path
/// </summary>
public static string GetFullPath(string assetPath)
{
if (string.IsNullOrEmpty(assetPath))
return ""; string p = Application.dataPath + assetPath.Substring();
return p.Replace("\\", "/");
} /// <summary>
/// full path 转 asset path
/// </summary>
public static string GetAssetPath(string fullPath)
{
if (string.IsNullOrEmpty(fullPath))
return ""; fullPath = fullPath.Replace("\\", "/");
return fullPath.StartsWith("Assets/") ?
fullPath :
"Assets" + fullPath.Substring(Application.dataPath.Length);
}
}
Unity --- 在原目录中,将选中的Texture剥离为rgb和alpha的更多相关文章
- 因为此控件已在 web.config 中注册并且与该页位于同一个目录中
在web.config文件配置了用户控件 <pages> <controls> <add tagPrefix="my" tagName="l ...
- Word2003中如何使封面和目录中不插入页码
Word2003中如何使封面和目录中不插入页码?? 转载自: http://blog.zzedu.net.cn/user1/zhaoweijie/archives/2010/187266.html ...
- C# Unity游戏开发——Excel中的数据是如何到游戏中的 (四)2018.4.3更新
本帖是延续的:C# Unity游戏开发--Excel中的数据是如何到游戏中的 (三) 最近项目不算太忙,终于有时间更新博客了.关于数据处理这个主题前面的(一)(二)(三)基本上算是一个完整的静态数据处 ...
- python找递归目录中文件,并移动到一个单独文件夹中,同时记录原始文件路径信息
运营那边有个需求. 下载了一批视频文件,由于当时下载的时候陆陆续续创建了很多文件夹,并且,每个文件夹下面还有子文件夹以及视频文件,子文件夹下面有视频文件或者文件夹 现在因为需要转码,转码软件只能对单个 ...
- Android sdk安装目录中没有platform-tools目录问题详解
sdk下载地址 http://tools.android-studio.org/index.php/sdk 安装步骤很简单,百度即可. 下面详细说一下,在安装中遇到android sdk下没有plat ...
- Step by step 活动目录中添加一个子域
原创地址:http://www.cnblogs.com/jfzhu/p/4006545.html 转载请注明出处 前面介绍过如何创建一个域,下面再介绍一下如何在该父域中添加一个子域. 活动目录中的森林 ...
- 【Tip】如何让引用的dll随附的xml注释文档、pdb调试库等文件不出现在项目输出目录中
项目输出目录(bin/debug|release)中经常是这个样子: main.exemain.pdb a.dll a.xml b.dll b.pdb b.xml ... 其中xml是同名dll的注释 ...
- 79 umount-卸除目前挂在Linux目录中的文件系统
Linux umount命令用于卸除文件系统. umount可卸除目前挂在Linux目录中的文件系统. 语法 umount [-ahnrvV][-t <文件系统类型>][文件系统] 参数: ...
- linux复制指定目录下的全部文件到另一个目录中
linux复制指定目录下的全部文件到另一个目录中复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir ...
随机推荐
- reduce函数
python中的reduce python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是 ...
- git加速和只下载部分目录
浅复制 工作要用到的.git有1.8G太大了.下载过程要好几个小时,太慢了.可以这样操作 git clone 默认会下载项目的完整历史版本,如果你只关心最新版的代码,而不关心之前的历史信息,可以使用 ...
- Java实现RSA密钥对并在加解密、加签验签中应用的实例
一.项目结构 二.代码具体实现 1.密钥对生成的两种方式:一种生成公钥私文件,一种生成公钥私串 KeyPairGenUtil.java package com.wangjinxiang.genkey. ...
- linux文件与目录的创建
在Linux初期的学习中,是我们对基础命令的掌握,首先我们学习文件与目录的创建,分别有一些命令与选项,我们依次来看: 1:在Linux系统中,一切服务皆以文件的形式表现,脚本文件,服务配置文件,记事本 ...
- linux 系统管理11 ——系统安全及应用
一.基本安全措施 1.系统账号清理 (1).将非登陆用户的shell设为/sbin/nologin 方法一.usermod -s 方法二.chsh命令,交互式修改 方法三.chsh -s usermo ...
- program与module
program,各方面与module都类似,其中声明的变量在program中都可见, 生命周期也是static类型的, program的结束,也是需要等待其中的所有initial块都执行结束. 与mo ...
- 《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core 解决方案结构解析1
创建好项目后,解决方案资源管理器窗口里我们看到,增加了不少文件夹及文件,如下图所示: 在解决方案文件夹中,找到项目文件夹,该文件夹又包含五个子文件夹 -Models.Controllers.Views ...
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined)
C 模拟 题意:给的是一个矩形,然后√2 的速度走,如果走到边上就正常反射,走到角上,暂停反射,我们知道要不循环要不暂停,记录走到的点最短时间 /*************************** ...
- MyBatis探究-----返回Map类型数据
1.使用@MapKey @MapKey:告诉mybatis封装Map的时候使用哪个属性作为Map的key Map<K, V>:键是这条记录的主键key,值是记录封装后的javaBean 1 ...
- 2018-2019-2 20165335『网络对抗技术』Exp5:MSF基础应用
主动攻击的实践: ms17_010(成功) 浏览器攻击的实践:ms14_064(成功) 客户端攻击的实践:adobe reader PDF的攻击(成功) 运用辅助模块的实践:VNC弱口令破解/绕过(失 ...