Unity图片导入设置

本文详细介绍了Unity中纹理导入的各项设置参数,包括TextureType、TextureShape、AlphaSource、Read/WriteEnable、GenerateMipMaps、WrapMode、FilterMode、AnisoLevel及各平台尺寸和格式的设置。此外,还提供了UnityEditor代码示例,展示如何通过代码设置纹理属性。

参考文档

https://docs.unity3d.com/Manual/class-TextureImporter.html

Texture Type(纹理类型) 有用于2D的,法线贴图的,鼠标贴图的等

Texture Shape(纹理形状) 默认情况下设置为2D

 

Alpha Source 是否导入Alpha通道

Read/Write Enable(是否启用读写) 开启读写可以访问Texture2D.SetPixels, Texture2D.GetPixels和其他Texture2D方法。开启会使Texture所需内存量增加一倍。因此默认情况下禁用此属性,并且仅在需要脚本访问权限时才启用它。

Generate Mip Maps(是否生成小图) Mipmap是Texture的较小版本,当Texture在屏幕上很小时会使用,用于优化实时3D引擎的性能。距离相机较远的对象使用较小的Texture版本。使用Mip Maps会占用33%的内存,但是不使用它们会导致巨大的性能损失。 Mip Maps对于避免多种形式的Texture混叠和闪烁也是必不可少的。如果是UI都在一个平面,不因摄像机距离变化可以不勾选。

Wrap Mode(平铺类型) Repeat 重复,Clamp 拉伸边缘,Mirror 镜像,Per-axis 可以分别设置U轴和V轴的平铺类型。

Filter Mode(过滤模式) Point 点模式:被拉伸时纹理成块状,Bilinear 双线性 :被拉伸时成模糊状,Thilinear: 三线性:与双线性类似,但纹理还会在不同的MIP级别之间进行模糊。性能也会相应变差。

Aniso Level(各向异性等级) 各向异性过滤使贴图在一个浅的角度查看时,看起来效果更好,但是会增加图形硬件的性能开销,通常您使用它对地板、地面或道路的贴图使其看起来更好。此变量的值的范围从1-9,其中1等于没有过滤而9等于完全过滤。值越大,贴图在浅角度看时显得更清晰。较低的值表示贴图在浅角度显得更模糊。

 

图片各个平台的尺寸和格式的设置:

Default是默认设置,不同平台可以override进行重写更改。

MaxSize 该纹理的最大尺寸,如原图尺寸为1024*568,该项设置成4096,unity也只会使用它的原尺寸大小,该值的大小大于等于图片原尺寸,如果小于纹理质量会有损失。

Resize Algorithm(调整大小算法) 当纹理尺寸大于指定的MaxSize时,用于缩小纹理的算法。Mitchell是默认的调整大小算法,Bilinear 对于小而锐利的细节很重要的图像,可能会保留比Mitchell更多细节。

Compression(压缩格式) None是不压缩,压缩质量越高,内存使用率也会越高。

对于5.3.8版本

  1. Compressed 压缩,如果纹理没有透明通道,一般使用该项,如果有透明通道,显示原图片有可能出现问题。每个像素占4bits
  2. 16 bits 低质量的真彩格式,每个像素占16bits
  3. TrueColor 真彩格式。质量最高,是Compressed的8倍,每个像素占32bits
  4. Crunched 这种类型将会根据显卡的GPU来选择合适的压缩格式进行压缩然后会选用一种CPU上就能处理的压缩格式再压缩一遍。可帮助纹理使用磁盘上最小的空间以及进行下载。如果在制作供人下载的资源包的时候这种类型非常的合适。这个类型的压缩需要很长时间,但在运行时解压是非常快的。

图片的大小一定要是2的幂次方,这样unity才能压缩成比较小的图片格式,如:etc、pvrtc等。如果原图不是2的幂次方,可以在advance设置Non Power of 2的值

ToNearest :转换成距离该图片最近的2的幂次方值。

ToLarger : 转换成比该图片大的2的幂次方值。

ToSmaller : 转换成比该图片小的2的幂次方值。

 

UnityEditor使用代码设置图片属性的方式:

string path = AssetDatabase.GetAssetPath(texture);  
TextureImporter texImporter = AssetImporter.GetAtPath(path) as TextureImporter;  
texImporter.textureType = TextureImporterType.Sprite;  
AssetDatabase.ImportAsset(path); 

 

Unity导入图片时,Unity 会根据图片的用途自动设置其 **Texture Type** 和相关参数。这种“自动设置模式”是由 Unity 的 **Import Settings(导入设置)** 根据文件路径、文件名、文件夹命名约定等进行智能推断的。 你可以通过以下方式控制或利用 Unity 的自动设置行为: --- ### ✅ 1. 使用特定文件夹名称触发自动设置 Unity 支持一些特殊的文件夹命名规则,当你把图片放入这些名字的文件夹中时,Unity 会自动应用相应的导入设置。 #### 常见特殊文件夹名: | 文件夹名 | 自动设置效果 | |---------|-------------| | `Editor` | 图片被当作编辑器 GUI 使用,Texture Type 设为 `GUI (Legacy)` 或不会被打包进游戏 | | `Resources` | 可通过 `Resources.Load()` 加载,但仍需手动设置 Texture Type | | `StreamingAssets` | 原始文件打包,不经过纹理处理 | | `Plugins` | 一般用于原生插件资源 | | `Sprites` / `UI` | 更可能默认设为 Sprite 模式 | 但更关键的是:**使用 `Sprite` 相关命名可触发自动设置** --- ### ✅ 2. 使用 Editor 脚本自定义导入行为(推荐) 你可以编写一个 `AssetPostprocessor` 脚本来监听资源导入事件,并自动修改导入设置。 #### 示例:将所有 `.png` 和 `.jpg` 图片自动设为 Sprite 模式 ```csharp using UnityEditor; using UnityEngine; // 此脚本放在 Assets/Editor 目录下 public class ImageImportProcessor : AssetPostprocessor { void OnPreprocessTexture() { // 只处理 PNG 和 JPG 文件 if (!assetPath.EndsWith(".png", System.StringComparison.OrdinalIgnoreCase) && !assetPath.EndsWith(".jpg", System.StringComparison.OrdinalIgnoreCase) && !assetPath.EndsWith(".jpeg", System.StringComparison.OrdinalIgnoreCase)) return; TextureImporter textureImporter = (TextureImporter)assetImporter; // 判断路径是否包含特定文件夹(如Sprites) bool isInSpritesFolder = assetPath.Contains("/Sprites/") || assetPath.StartsWith("Sprites/"); // 自动设置为 Sprite 模式 textureImporter.textureType = TextureImporterType.Sprite; textureImporter.spritePixelsPerUnit = 100; // 默认每单位像素数 textureImporter.filterMode = FilterMode.Bilinear; textureImporter.npotScale = TextureImporterNPOTScale.None; // 如果在 Sprites/UI 等目录下,启用 Read/Write? if (isInSpritesFolder) { textureImporter.mipmapEnabled = false; textureImporter.alphaIsTransparency = true; } // 可选:压缩设置(根据平台调整) // textureImporter.textureCompression = TextureImporterCompression.CompressedHQ; Debug.Log($"Auto-set {assetPath} as Sprite."); } } ``` > 🔧 将此脚本保存为 `ImageImportProcessor.cs` 并放入 `Assets/Editor` 文件夹中。 --- ### ✅ 3. 解释代码逻辑 - `OnPreprocessTexture()` 是 Unity 在每次导入纹理前调用的方法。 - 我们检查文件扩展名,确保只对图像文件生效。 - 设置 `textureType = Sprite` 表示该图像是用于 2D 渲染或 UI 的精灵。 - `spritePixelsPerUnit = 100` 定义了在世界坐标中每 100 像素对应 1 个单位长度。 - `alphaIsTransparency = true` 启用透明通道支持。 - `mipmapEnabled = false` 对 2D 图像通常不需要 Mipmap,避免边缘发黑。 - 可进一步判断路径来区分图标、UI、背景等不同设置。 --- ### ✅ 4. 其他常用自动设置场景 | 需求 | 设置建议 | |------|----------| | 2D 角色动画 | `Texture Type: Sprite`, `Pixels Per Unit: 16 or 32` | | UI 图标 | `Texture Type: Sprite`, `Compression: Low Quality`, `Generate Mip Maps: Off` | | 3D 模型贴图 | `Texture Type: Default`, `sRGB Enabled`, `Mip Map: On` | | 法线贴图 | `Texture Type: Normal Map`, 手动转换或启用 Bump From Albedo | | 瓦片地图(Tilemap) | `Texture Type: Sprite`, `Sprite Mode: Multiple`(切片后使用) | --- ### ✅ 5. 如何手动批量应用设置? 如果你已经有大量图片需要重新设置: 1. 选中多个图片资源(Ctrl/Cmd 多选) 2. 在 Inspector 中修改 Texture Type 为 `Sprite (2D and UI)` 3. 点击 Apply 应用统一设置 或者使用脚本批量处理已有资源: ```csharp // 批量设置现有图片为 Sprite(运行在编辑器) public static void BatchSetSprites() { string[] guids = AssetDatabase.FindAssets("t:Texture2D", new[] { "Assets" }); foreach (string guid in guids) { string path = AssetDatabase.GUIDToAssetPath(guid); TextureImporter importer = AssetImporter.GetAtPath(path) as TextureImporter; if (importer != null) { importer.textureType = TextureImporterType.Sprite; importer.spritePixelsPerUnit = 100; importer.SaveAndReimport(); } } Debug.Log("Batch update complete."); } ``` 调用方法:可在菜单中添加按钮执行。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值