[Unity3D]图片格式自定义MaxSize

news2024/11/25 12:47:44

如何适用
只需在“项目”窗口中创建一个名为“编辑器”的文件夹,然后在其中添加此脚本即可。然后,打开Window-Custom Max Size Setter,选择一个或多个纹理并调整其最大尺寸值。

由于 NPOT 纹理大小不能很好地与压缩算法配合使用,因此该技术主要用于微调精灵图集中打包的精灵的最大大小。
请添加图片描述

using UnityEditor;
using UnityEngine;

public class CustomMaxSizeSetter : EditorWindow
{
	private const int MINIMUM_MAX_SIZE = 32;
	private const int MAXIMUM_MAX_SIZE = 2048;

	private int initialMaxSize = -1;
	private int currentMaxSize = -1;

	private Texture2D[] selection;
	private string selectionLabel;

	[MenuItem( "Window/Custom Max Size Setter" )]
	private static void Init()
	{
		CustomMaxSizeSetter window = GetWindow<CustomMaxSizeSetter>();
		window.minSize = new Vector2( 250f, 85f );
		window.titleContent = new GUIContent( "Custom Max Size" );
		window.Show();
	}

	private void OnEnable()
	{
		OnSelectionChange();
	}

	private void OnGUI()
	{
		GUILayout.Label( selectionLabel, EditorStyles.boldLabel );

		EditorGUI.BeginDisabledGroup( selection == null || selection.Length == 0 );

		EditorGUI.showMixedValue = currentMaxSize < 0;
		EditorGUI.BeginChangeCheck();
		int maxSize = EditorGUILayout.IntSlider( currentMaxSize, MINIMUM_MAX_SIZE, MAXIMUM_MAX_SIZE );
		if( EditorGUI.EndChangeCheck() ) // Otherwise, IntSlider clamps value from -1 to MINIMUM_MAX_SIZE with no user input
			currentMaxSize = maxSize;
		EditorGUI.showMixedValue = false;

		EditorGUILayout.Space();

		EditorGUI.BeginDisabledGroup( currentMaxSize < 0 || initialMaxSize == currentMaxSize );

		if( GUILayout.Button( "Apply" ) )
		{
			AssetDatabase.StartAssetEditing(); // Apart from batching the reimport operations, this also ensures OnProjectChange isn't called in the middle of this for-loop
			try
			{
				for( int i = 0; i < selection.Length; i++ )
					SetMaxSizeOfTexture( selection[i], currentMaxSize );
			}
			finally
			{
				AssetDatabase.StopAssetEditing();
			}
		}

		EditorGUI.EndDisabledGroup();
		EditorGUI.EndDisabledGroup();
	}

	private void OnProjectChange() // Texture Max Size might be changed from the Inspector and etc.
	{
		OnSelectionChange();
	}

	private void OnSelectionChange()
	{
		selection = Selection.GetFiltered<Texture2D>( SelectionMode.Assets );
		if( selection == null || selection.Length == 0 )
		{
			selectionLabel = "Max Size of \"Nothing Selected\":";
			initialMaxSize = currentMaxSize = -1;
		}
		else if( selection.Length == 1 )
		{
			selectionLabel = "Max Size of \"" + selection[0].name + "\":";
			initialMaxSize = currentMaxSize = GetMaxSizeOfTexture( selection[0] );
		}
		else
		{
			selectionLabel = "Max Size of \"" + selection[0].name + "\" and " + ( selection.Length - 1 ) + " more:";
			initialMaxSize = currentMaxSize = GetMaxSizeOfTexture( selection[0] );
			for( int i = 1; i < selection.Length; i++ )
			{
				int maxSize = GetMaxSizeOfTexture( selection[i] );
				if( maxSize != initialMaxSize )
				{
					initialMaxSize = currentMaxSize = -1;
					break;
				}
			}
		}

		Repaint();
	}

	private int GetMaxSizeOfTexture( Texture2D texture )
	{
		TextureImporter textureImporter = (TextureImporter) AssetImporter.GetAtPath( AssetDatabase.GetAssetPath( texture ) );
		return textureImporter.maxTextureSize;
	}

	private void SetMaxSizeOfTexture( Texture2D texture, int maxSize )
	{
		TextureImporter textureImporter = (TextureImporter) AssetImporter.GetAtPath( AssetDatabase.GetAssetPath( texture ) );
		textureImporter.maxTextureSize = maxSize;
		textureImporter.npotScale = TextureImporterNPOTScale.None;
		textureImporter.SaveAndReimport();
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1135297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式系统的链路追踪,让你轻松解决订单无法查看的问题!

你好&#xff0c;我是积极活泼的小米&#xff01;今天我要跟大家聊聊分布式系统的链路追踪&#xff0c;这个话题对于我们在技术领域工作的小伙伴们来说&#xff0c;可是非常重要的哦&#xff01; 背景 昨天&#xff0c;产品大佬丰哥找到了我&#xff0c;他抱怨说分销员的订单…

【C++杂货铺】C++11特性总结:列表初始化 | 声明 | STL的升级

文章目录 一、C11简介二、统一的列表初始化2.1 { } 初始化2.2 列表初始化在内置类型上的应用2.3 列表初始化在内置类型上的应用2.4 initializer_list2.4.1 {1, 2, 3} 的类型2.4.2 initializer_list 使用场景2.4.3 模拟实现的 vector 中的 { } 初始化和赋值 三、声明3.1 auto3.1…

【小尘送书-第九期】《Excel数据透视表应用大全for Excel 365 Excel 2019》

大家好&#xff0c;我是小尘&#xff0c;欢迎你的关注&#xff01;大家可以一起交流学习&#xff01;欢迎大家在CSDN后台私信我&#xff01;一起讨论学习&#xff0c;讨论如何找到满意的工作&#xff01; &#x1f468;‍&#x1f4bb;博主主页&#xff1a;小尘要自信 &#x1…

OTA语音芯片NV040C在智能电动牙刷的应用

以往我们对牙齿的清洁是使用的是手动方式进行&#xff0c;用柔软的牙刷刷毛去进行牙齿的清洁。但现在我们拥有了一种新颖的刷牙方式&#xff0c;靠电力去驱动、清洁我们的牙齿。电动牙刷的刷头通过快速旋转&#xff0c;产生高频振动&#xff0c;将牙膏迅速分解为细小的泡沫&…

基于Java的医院预约挂号管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

SiteGround主机最新购买使用指南及外贸建站教程

SiteGround是一家知名的虚拟主机服务提供商&#xff0c;它在过去几年中在WordPress和WooCommerce建站领域取得了显著的发展和改进。SiteGround致力于为用户提供专门针对WordPress优化的虚拟主机&#xff0c;并将WordPress深度集成到其主机服务中&#xff0c;使外贸建站过程变得…

2、QtCharts QGraphicsScene绘制折线图

文章目录 界面设置代码 界面设置 代码 #include "dialog.h" #include "ui_dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog) {ui->setupUi(this);//构建图标系列lineSerisenew QLineSeries(this);//为折线添加数据for …

一文详解Docker容器(Container)

目录 基本介绍 常用命令 docker run &#xff1a;创建一个新的容器 docker ps &#xff1a;列出 Docker容器相关信息 docker stop &#xff1a;停止一个运行中的 Docker容器 docker rm &#xff1a; 删除一个或者多个已经停止的 Docker容器 docker pause &#xff1a;暂…

怎么突破反爬虫机制

在当今的数字化时代&#xff0c;网络爬虫已经成为了收集信息和数据的重要工具。然而&#xff0c;许多网站和平台都配备了反爬虫机制&#xff0c;以防止恶意攻击和过度访问。对于普通用户来说&#xff0c;如何突破这些反爬虫机制呢&#xff1f;本文将为你提供一些实用的技巧和建…

《Cesium 进阶知识点》- el-select 列表打开后,点击Cesium.Viewer场景无法自动关闭

前提 el-select属性 popper-append-to-body 必须 为 false。这样初始化的列表 el-select-dropdown 才在 el-select下&#xff1b;目前测试&#xff0c;仅对 Cesium.Viewer 生成的 canvas 点击时列表无法自动关闭&#xff1b;使用原生 canvas 和 echarts&#xff0c;点击其场景…

【uniapp】仿微信支付界面

效果图 完整代码 <template><view class="my-pay-page"><view :style=

opencv python 环境安装问题

问题描述&#xff1a; 在centos上使用python的某个库&#xff0c;有用到opencv&#xff0c;但在import时报以下错误&#xff1a; ImportError: libGL.so.1: cannot open shared object file: No such file or directory 若是系统可以连接外网&#xff0c;则只需一条命令&…

kubeadm方式部署单节点kubernetes环境

------实验所需机器 master&#xff08;2C/4G&#xff0c;cpu核心数要求大于2&#xff09; 20.0.0.101 docker、kubeadm、kubelet、kubectl、flannel node01&#xff08;2C/2G&#xff09; 20.0.0.102 docker、kubeadm、kubelet、kubectl、flannel node02&#xff…

基于 ARM+FPGA+AD平台的多类型同步信号采集仪开发及试验验证(二)板卡总体设计

2.2 板卡总体设计 本章开发了一款基于 AD7193RJ45 的多类型传感信号同步调理板卡&#xff0c;如图 2.4 所 示&#xff0c;负责将传感器传来的模拟电信号转化为数字信号&#xff0c;以供数据采集系统采集&#xff0c;实现了 单通道自由切换传感信号类型与同步采集多类型传…

excel巧用拼接函数CONCAT输出JSON、SQL字符串

一、前言 工作中有时候需要用Excel对数据进行组装&#xff0c;需要输出JSON或者SQL语句&#xff0c;然后通过脚本或Java程序完成一些特定功能&#xff0c;总结了一下用到的函数&#xff0c;方便以后使用。这里使用的是WPS软件。 二、输出JSON 例如&#xff1a;需要将几列数据…

【Proteus仿真】【STM32单片机】智能语音家居陪护机器人

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用OLED显示模块、红外传感器、蜂鸣器、DS18B20温度传感器&#xff0c;风扇LED、语音识别模块等。 主要功能&#xff1a; 系统运行后&#xff0c;…

asp.net古代服饰系统VS开发sqlserver数据库web结构c#编程包含购物答题功能点

一、源码特点 asp.net 古代服饰系统 是一套完善的web设计管理系统(含购物 答题)&#xff0c;系统采用mvc模式&#xff08;BLLDALENTITY&#xff09;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境 为vs2010&#xff0c;数据库为sqlserver…

华为数通方向HCIP-DataCom H12-831题库(多选题:81-100)

第81题 经典的网络转发方式是基于路由表转发。OpenFlow交换机的转发方式是基于流表转发。对于这两种转发方式,以下说法正确的有哪些选项? A、流表的匹配方式是同时匹配流量的MAC地址和IP地址。 B、路由表的匹配方式是匹配拥有最长掩码的目的网段路由 C、流表是变长的。一台网…

双十一购物狂欢节准备好买什么了吗?双十一这些好物不能错过

双十一是电商节&#xff0c;各大电商平台都会推出各种促销活动&#xff0c;吸引消费者抢购商品。在这个特别的时刻&#xff0c;许多人都迫不及待地开始筹备自己的购物清单&#xff0c;想要趁着这个机会购买自己心仪的商品。那么&#xff0c;在这个双十一购物狂欢节&#xff0c;…