当前位置: 首页 > news >正文

Unity资源导入设置方式选择

本文由 NRatel 历史笔记整理而来,如有错误欢迎指正。

一、两种方式

1、Preset Manager(预置)

    https://docs.unity3d.com/2021.3/Documentation/Manual/Presets.html

    https://docs.unity3d.com/2021.3/Documentation/Manual/class-PresetManager.html


    Preset:​
        一种可保存和重复应用的资源导入配置模板。 
        需先在 Inspector 窗口中为某种类型资源(如 Texture、Model、AudioClip)配置好所有导入设置后,将其保存为一个 .preset 文件。
        然后在 Inspector 窗口中手动拖拽或应用 Preset 到选中的资源(可多选资源批量应用)。
        支持只应用部分字段。

    PresetManager
        可在 Edit -> Project Settings -> Preset Manager 中设置默认 Preset。
        允许设置 全局默认 和 特定规则的覆盖(路径支持通配符)(存在覆盖时,列表下方覆盖上方​)。
        生效时机:被路径规则到的资源,将在 新导入 或 在其Inspector上使用Reset命令时应用 Preset。

    优缺点:
        直观可视、.preset文件可以纳入版本控制系统。
        规则仅为路径匹配,无法自定义复杂的导入判断(但不一定需要)。


2、AssetPostprocessor (资源后处理器)

    https://docs.unity3d.com/2021.3/Documentation/ScriptReference/AssetPostprocessor.html

    一个 ​C# 脚本 API。通过编写继承自 AssetPostprocessor 的类并覆写其事件方法。
    在资源导入过程中动态拦截并修改其导入设置。

    OnPreprocessXXX
        在最开始被调用,可在其中覆盖 XXXImporter 的设置,修改其 纹理属性、更改压缩格式等。
        注意:修改完成后不应调用 AssetImporter.SaveAndReimport。

    OnPostprocessXXX
        在导入完成时被调用,通常只应在其中审视资源,而不应该修改 XXXImporter(因为导入已完成),也不推荐直接操作修改资源。
        若在它里面 修改 XXXImporter 的设置,只会在下次导入时生效,这会制造出明显问题。
        注意:不要因此强行修改 XXXImporter 并调用 AssetImporter.SaveAndReimport。这将使资源导入2次,导致严重耗时。

    OnPostprocessAllAssets
        在完成任意数量的资源导入后(当资源进度条到达末尾时)被调用。
        可利用它,在资源导入/删除/移动后,生成或重置资源关联的其他资源。
        如:为UI的Sprites目录生成对应的SpriteAltas、为Spine资源生成对应的预设等。

    内部常用搭配类 AssetImporter

    https://docs.unity3d.com/2021.3/Documentation/ScriptReference/AssetImporter.html

    在 AssetPostprocessor 中获取:XXXImporter xxxImporter = (XXXImporter)this.assetImporter;

    项目中,除插件携带外,同类型资源尽量只维护一个 XXXPostprocessor,然后在其中分流处理。

    原因是:新增 XXXPostprocessor,将导致项目中所有此类型资源的重新导入,而在 XXXPostprocessor 内部修改则不会。

    错误示例:AssetPostprocessor_EffectTextures、AssetPostprocessor_SpineTextures、AssetPostprocessor_ModelTextures。。

二、疑问

1、整体导入流程:

    Preset基础设置 → OnPreprocessXXX → 检查一致性 -> 标准导入流程 → OnPostprocessXXX --→ OnPostprocessAllAssets

    检查一致性时,Unity 通过 .meta 文件的哈希值(资源内容+导入设置)​判断是否需要重新导入。

    若无需重新导入,将跳过实际生成导入结果(如纹理压缩、模型网格生成等)​​ 的耗时步骤,复用缓存的中间文件(.meta 文件关联这些文件)。

    但,即使缓存命中,Unity ​仍然会触发​ OnPostprocessXXX 和 OnPostprocessAllAssets 事件!

2、PresetManager 和 OnPreprocessXXX 的 触发时机/生效能力对比:

Reimport 文档说明

https://docs.unity3d.com/cn/current/Manual/ImporterConsistency.html

3、ScriptedImporter 是什么?

    https://docs.unity3d.com/cn/current/Manual/ScriptedImporters.html

    为Unity原生不支持的全新格式的文件(特定扩展名的文件,如:hello.xyz, hello.lua)创建导入器,在内部完成令Unity可识别的资源的组装、创建。

三、项目实际需要分析

1、导入时需按照路径匹配规则设置资源格式、允许特殊情况修改至与当前路径规则不同。
    如,个别图需要单独调整为高品质、有 Read/Write、MipMaps、Filter Mode 等需求。
    适合 PresetManager。

2、需能检查提示出与当前路径规则不同的文件,避免意外修改、位置挪动等导致的问题。

3、为UI的Sprites目录生成对应的SpriteAltas、为Spine资源生成对应的预设等。
    使用 OnPostprocessAllAssets,且在创建图集时:

    ⑴、仅创建时默认设置图集Texture选项(可特殊修改,不会被覆盖)
    ⑵、仅创建时默认设置图集格式(可特殊修改,不会被覆盖)
    ⑶、覆盖设置图集 IncludeInBuild 为 true(个人修改会被覆盖)
    ⑷、覆盖设置图集打包参数(个人修改会被覆盖)
    ⑸、覆盖设置图集引用的碎图目录(个人修改会被覆盖)


四、其他

PresetManager 与 并行导入冲突!

开启并行导入后,Preset设置会失效(Unity2021.3.42f1c1中)

http://www.dtcms.com/a/361333.html

相关文章:

  • 【Element Plus `el-select` 下拉菜单响应式定位问题深度解析】
  • 【数学建模学习笔记】缺失值处理
  • SRE 系列(五)| MTTK/MTTF/MTTV:故障应急机制的三板斧
  • 每周读书与学习->认识性能测试工具JMeter
  • 【开题答辩全过程】以 基于python爬虫对微博数据可视化及实现为例,包含答辩的问题和答案
  • Certificate is Signed Using a Weak Signature Algorithm漏洞解决
  • 从零到一,在GitHub上构建你的专属知识大脑:一个模块化RAG系统的开源实现
  • [VLDB 2025]阿里云大数据AI平台多篇论文被收录
  • 国别域名的SEO优势:是否更利于在当地搜索引擎排名?
  • 【赵渝强老师】阿里云大数据MaxCompute的体系架构
  • Midscenejs自然语言写测试用例
  • 设计模式在Android开发中的实战攻略(面试高频问题)
  • 基于STM32设计的宠物寄养屋控制系统(阿里云IOT)_276
  • 阿里云代理商:轻量应用服务器介绍及搭建个人博客教程参考
  • Shell 编程 —— 正则表达式与文本处理器
  • Shell脚本编程:函数、数组与正则表达式详解
  • 稳联技术的Profinet转Modbus转换网关与信捷PLC从站的连接配置进行了案例分析
  • Java全栈开发工程师面试实战:从基础到微服务的完整技术演进
  • 特征选择方法介绍
  • GPS:开启定位时代的科技魔杖
  • 趣味学RUST基础篇(String)
  • aws上创建jenkins
  • Pomian语言处理器研发笔记(三):使用组合子构建抽象语法树
  • 构建单页应用:React Router v6 核心概念与实战
  • Ubuntu22.04网络图标消失问题
  • 【C++进阶篇】学习C++就看这篇--->多态超详解
  • Photoshop - Ps 储存并重新载入选区
  • 01 2025最新VMware虚拟机下载教程
  • 嵌入式ARM程序高级调试技能:22.malloc free 的wrap实现,free支持 align free
  • AWS:AssumeRole背后真正的安全哲学,不仅是迂回