【案例设计】配置与批量化处理外部 Texture 导入格式转换

news2024/11/16 13:37:33

开发平台:Unity 2020 版本以上
编程平台:Visual Studio 2020 版本
编程语言:CSharp

前言


  Unity 开发者不仅是要求在面对开发需求上有着预见性的目光与能力去应对各种功能实现。更加注重的是通过各个项目的开发类型与过程,总结一套利于缩短开发流程的重要工具链。本文将重点关于 Unity 开发流程中,如何缩短外部导入纹理配置这一过程进行设计分享与思路解读。

思考:为什么要优化 Texture 外部导入流程?


  Texture 是 Unity 使用频率高且参与重要的资产类对象。决定工程将以何种画面风格呈现于玩家用户。而实际上,并非所有的 Texture 资产均准备完毕。开发的过程往往伴随 已有Texture 基础上进行开发。且为区别各类 Texture 的应用场景,分别放置于不同子目录下。那么,为什么会认为 Texture 外部导入流程是如此麻烦?

  • 一套标准的 Texture 导入流程
    1. 导入 Texture 资源
    2. 选中 Texture 资源
    3. 配置 Texture 相关参数并应用
  • 每一次新的 Texture 资源导入,都需要重新配置。对异常的 Texture 还需更多调整与应用。

思考:如何优化 Texture 外部导入流程?


  Unity 开发者最重要的是保持一种 程序 思维。例如:打开工程目录 —— 右键 Project/Show In Browsers 菜单项。我们同样可以仿照该方法去简化这一流程。于是如何获取外部导入资产成为了当前解决问题的首要目标!(不用想了,Unity 提供了 TextureImporter 的可序列化资产!那必然是有关于 TextureImporter 类可声明使用!)


什么是 Texture Importer ?
答:Unity 引擎针对外部 Texture 导入配置的管理类。其内容匹配资产目录下Texture对应的详细配置信息。


如何创建 Texture Importer 资产 与 配置默认预设 ?

![在这里插入图片描述](https://img-blog.csdnimg.cn/60e349cbfef147dbb8626a72094166e2.png
在这里插入图片描述在这里插入图片描述


为什么还需要开发 批处理 工具?Texture Importer 的已有配置不应满足本文目的?
  并非每一次的预设都是绝对无问题的。对于部分 PNG类型的 Texture 对象,仅支持 RGB32位,对于这部分的纹理处理,Unity 的 Auto 选项并不会择优处理。仍需要开发者手动完成调节。因此,考虑到 Texture Importer 预设 类型的多样性。开发批处理工具是显得尤为必要的。
  工具开发的宗旨是便利化开发过程,缩短开发工时。而非复杂化开发过程。既然是一键完成任务目标的功能,应当考虑开放样式配置内容。与一键应用预设的功能。最常见的是 右键扩展菜单 完成所有操作。工具栏开放菜单,以更好配置预设内容。

程序:实现 Mune 扩展


[MenuItem("Assets/资产管理/一键 Texture 转 Sprite", false, 0)]
public static void DoTexture2Sprite()
{
	// Texture 转 Sprite 方法内容
}
  • 核心API:MenuItem() —— 更多解释见 Unity 中文文档解释。
  • 注意项:应用于资产管理,期望于修改 Project 目录下内容,选择 “Assets” 作为路径头。

程序:核心API


第一步:思考 - 获取 需参与转变 的 资产对象

AssetImporter.GetAssetAtPath(string path);

  在 Unity 中,所有参与的资产对象,均可通过 AssetDatabase 访问,但对于一些需要处理后运用于场景内对象的部分资产,需要 AssetImporter.GetAssetAtPath(string path) 以转换为可用的 AssetImporter 类型以便处理。于是,如何获取路径下资产对象路径是接下来重要解决的问题。

关于 Asset Importer 的更多说明
解释:这是 Unity 针对导入 Unity Editor 的特定资源的基类。基于该基类,派生出 PluginImporter、TextureImporter 等资源导入类。在后面为解决 Texture 转 Sprite 提供保障。


第二步:思考 - 获取 目录下所有资产路径

System.IO.Directory.GetFils(string path, string filter, SearchOption thisOption);

  在获取资产路径上,Unity 并未提供可用的检索资产目录的API。但并不妨碍我们使用 System.IO 作为替代方式,获取目录下所有路径信息。该 API 提供 Dirctory.GetFiles() 方法,针对使用需求,帅选需求类型的文件,并返回路径。并且在处理子嵌套目录路径文件上,提供 SearchOption.AllDirectories 项获取目录路径下所有子文件(根子文件与非根子文件)的路径信息。


第三步:思考 - 判断资产对象是否为期望修改资产对象?

public bool IsTextureAsset()
{
	var thisAsset = AssertImporter.GetAtPath("This is a example text")return thisAsset as TextureImporter == null
}

  TextureImporter 作为 AssetImporter 的派生类,负责 Texture 资产的导入工作。类似 UnityWebRequest 中针对 Texture、Audio 等类型的资源下载,有 DownloadHandlerBuffer、DownloadHandlerTexture、DownloadHandlerAudioClip、DownloadHandlerAssetBundle、DownloadHandlerScript 的下载类型。
  如果该类型资源不属于 转换对象 资源类型,将会返回 Null 以区分。


第四步:应用 Texture Importer 预设

public void OnApplyToThis(TextureImporter thisImporter)
{
	thisImporter.textureType = TextureType.Sprite;
	// ......
}

  预设 API 参考 文档:TextureImporter API 中文文档 。 在 API 选择上,建议参考 Editor 中 Inspector 面板展示的元素项。值得注意:在不同 Unity 版本中,TextureImporter 的 API 或多少的存在变动。一切以实际版本中 TextureImporter 预设视图展示元素为主。

TextureImporter.SaveAndReimport();

  仅修改 预设文件,是无法使用新样式设计。需要存储后才可使用。毕竟在 Inspector 窗口进行预设调整后,也需要 ”Apply“ 已完成与应用预设。换在程序中,也应当添加上述行设计。

回顾:关于此类设计的拓展


  使用程序化配置设定集,在针对普通 Texture 上足以应付。但真的合适吗?我们注意到 TextureImporter 预设窗展示格式是存在一定关联的属性对象群体。根据其选项,衍生出符合或与之匹配的选项,在应对极端情况下的 Texture 处理,显得捉襟见拙。有没有什么方式,拓展其内容的可视化配置?

  答:使用 EditorWindow 视窗建立可配置项。

public class TextureImporterEditorWindow : EditorWindow
{
	[MenuItem("Tools/Texture Importer/Open Custom Windown")]
	private static void CreateWindow()
	{
		var thisWindow = GetWindow<TextureImport>();
		thisWindow.textContent.text = "Texture Importer";
		thisWindow.Show();
	}
	
	static TextureImporterType TIType;

	public override void OnInspectorGUI()
	{
		TIType = EditorGUILayout.EnumFlagsField("This is a enum flag title", TIType);
		//...
		if (GUILayout.Button("一键转换")) { //...应用于设 }
	}
}

  编写 Editor Window 需要了解 EditorGUILayoutGUILayoutEditorGUIGUI 这四类 API,以更好的优化编辑窗口。搭配此窗口灵活修改预设信息以更好解决 Texture 导入需求。

设计中的不足点
  或许应对需求情况,Editor Window 与 右键快捷菜单 提供了较为方便的设置与预设应用。但存在仍然需要部署至少一个默认配置项,有时候期望的预设项并非适用于个人期望。制作类似 Texture Importer 资产形式以应用预设或许是更加方便的事情。那么 SriptablObject 将无疑是最佳最优秀的预设设计。参考 Unity 默认 Texture Importer 提供的设定 default 的快捷入口,可否直接建立 多类型资产预设,直接应用反而比程序设计更好,但对已导入 Texture 或许程序设计的工具更合适。

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

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

相关文章

计算机体系结构:不同改进方案的性价比计算

题目内容 某一计算机用于商业外贸的事务处理&#xff0c;有大量的字符串操作。由于这种事务处理很普遍&#xff0c;有较大的市场&#xff0c;故而设计人员决定在下一代此类计算机的CPU中加入字符串操作的功能。经测试应用软件调查发现&#xff0c;字符串操作的使用占整个程序运…

进程切换及一些常见概念(面试必问)

目录前言一、竞争性1、什么是进程的竞争性&#xff1f;2、为什么进程间存在竞争性&#xff1f;二、独立性#这里先简单了解三、并行四、并发五、优先级队列六、进程切换寄存器1. 函数返回值2. 进程上下文数据总结前言 在不同的进程在处理机上切换的过程中&#xff0c;我们需要学…

碳酸钙/GPC3单克隆抗体介导阿霉素二氧化硅纳米粒/DOX-GNRs@mSiO2-HA-RGD纳米制备方法

小编在这里整理了碳酸钙/GPC3单克隆抗体介导阿霉素二氧化硅纳米粒/DOX-GNRsmSiO2-HA-RGD纳米制备方法&#xff0c;来看&#xff01; 碳酸钙阿霉素二氧化硅纳米颗粒制备方法&#xff1a; 包括以下步骤&#xff1a; 将含有钙离子的乙醇溶液与含有氨水与盐酸阿霉素的水溶液混合,…

【Jupyter】远程连接Jupyter服务器

远程连接Jupyter 步骤一 配置Jupyter https://blog.csdn.net/MYRLibra/article/details/109599531 https://blog.csdn.net/weixin_40641725/article/details/114636779 安装 conda activate abc #激活虚拟环境 pip install jupyter #安装 jupyter notebook --generate-conf…

Webservice接口-WSDL文档【Webservice】

WSDL是一个用于精确描述Web服务的文档&#xff0c;WSDL文档是一个遵循WSDL-XML模式的XML文档。WSDL 文档将Web服务定义为服务访问点或端口的集合。在 WSDL 中&#xff0c;由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来&#xff0c;因此可以对抽象…

python使用flask实现前后端分离通过前端修改数据库数据【全栈开发基础】

文章目录&#x1f68e;前言&#xff1a;&#x1f6fa;工具&#x1f693;截图&#x1f695;数据库截图&#x1f699;前端截图&#x1f698;代码&#x1f6b2;增加&#x1f355;前端 HTML&#x1f35f;后端 python&#x1f6f4; 删除&#x1f355;前端 HTML&#x1f35f;后端 pyt…

AMM 套利者

AMM 套利者 理由 以太坊和其他支持 EVM 的区块链上有很多 AMM。其中许多 AMM 是 UniswapV2 的分叉项目或与 UniswapV2 具有相同的接口。这些 AMM 的列表&#xff1a; Uniswap V2(以太坊)寿司交换&#xff08;以太坊&#xff09;煎饼掉期(BSC)MDEX(BSC/heco) ... 一旦相同代币…

SpiderPool - 云原生容器网络 IPAM 插件

SpiderPool 来源于容器网络落地实践的经验积累&#xff0c;是「Daocloud 道客」开源的原生容器网络 IPAM 插件&#xff08;github&#xff1a;https://github.com/spidernet-io/spiderpool&#xff09;&#xff0c;主要用于搭配 Underlay CNI 实现容器云平台精细化的管理和分配…

策略验证_指标买点分析技法_运用boll布林线指标选择买点

写在前面&#xff1a; 1. 本文中提到的“股票策略校验工具”的具体使用操作请查看该博文&#xff1b; 2. 文中知识内容来自书籍《同花顺炒股软件从入门到精通》 3. 本系列文章是用来学习技法&#xff0c;文中所得内容都仅仅只是作为演示功能使用 目录 解说 策略代码 结果 解…

基于云原生网关的可观测性最佳实践

作者&#xff1a; 井轶 为什么要进行可观测性建设 可观测性并不是一个新词&#xff0c;该词来源于控制理论&#xff0c;是指系统可以由其外部输出推断其其内部状态的程度&#xff0c;随着 IT 行业几十年的发展&#xff0c;IT 系统的监控&#xff0c;告警&#xff0c;问题排查…

【附源码】计算机毕业设计JAVA学生信息管理系统

【附源码】计算机毕业设计JAVA学生信息管理系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…

联想Filez助力知名生物制药企业 建立业务数据安全体系

苏州某生物制药企业是一家抗体研发企业&#xff0c;其研发生产基地设在苏州。主要从事临床样品&#xff08;原液和成品&#xff09;的开发和生产&#xff0c;致力于通过持之以恒的研发和专业的生产技术&#xff0c;以最快的速度实现生物制品的批准。 随着企业各项业务的快速发展…

Redis——》数据类型

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Redis——》数据类型5种基本类型3种特殊类型数据类型和底层数据结构5种基本…

第一个 GoWeb 程序,三款主流框架 Beego、Gin 和 Iris 快速入门

1、什么是web应用 Web应用程序是一种可以通过Web访问的应用程序&#xff0c;程序的最大好处是用户很容易访问应用程序&#xff0c;用户只需要有浏览器即可&#xff0c;不需要再安装其他软件。 一个Web应用程序是由完成特定任务的各种Web组件构成的并通过Web将服务展示给外界。…

网络是怎样连接的--生成HTTP请求消息过程

文章目录1.1 何为网址1.2 解析网址1.3 HTTP在干嘛1.4 生成http请求和响应1.1 何为网址 网址&#xff0c;准确来说应该叫URL,比如以http://开头的那一串东西.但实际上除了“http:”&#xff0c;网址还可以以其他一些文字开头&#xff0c;例如“ftp:”“file:”“mailto:”等。而…

免费申请Jetbrains全家桶

文章目录Jetbrains全家桶免费申请的人群学生和老师申请的要求申请方式申请流程解决收不到邮件的问题编辑内容进行认证申请成功Jetbrains全家桶 Jetbrains是著名的编程工具商业软件提供商&#xff0c;旗下有很多软件。包括IDE、团队开发工具、插件和微软.Net辅助工具、包括自创语…

[附源码]java毕业设计小型银行贷款管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

C\C++刷题DAY4

目录 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 1.第一题 206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;调转指向关系&#xff0c;使用双指针的思想 1指向2&#xff0c;改成2指向1&#xff0c;以此类推。 参考代码&#xff1a; struct L…

2022年NPDP新版教材知识集锦--【第三章节】(5)

【系统工程】 系统工程的概念 系统工程原理将系统思维和系统工程过程模型的概念结合起来&#xff0c;通过设计、项目管理工具和方法的系统和集成过程将问题转化为解决方案。 所有系统都由具有属性或功能的部分组成&#xff0c;元素之间通过关系相互联系。 系统复杂性由结构…

想学爬虫爬取网页,但是不知道流程?

爬取网页总体概述&#xff1a; 1.使用urllib请求网页&#xff0c;获取网页源码。 2.使用bs4配合re正则表达式进行页面数据解析&#xff0c;获取到自己想要的数据。 3.使用pymysql保存到数据库或xlwt保存成excel文件。 温馨提示&#xff1a;学习之前需要先了解py基础知识&#x…