Unity2D 项目开工的头一件事,往往不是写代码,而是把美术、音频、字体这一大堆资源包塞进工程里。看着简单,实际动手就知道坑有多密集:导进来的背景糊成一片,切割出来的精灵对不齐锚点,预制体上一片洋红,音频在编辑器里响得很好放到设备上却成了哑巴。这套《AVG-太空之战》的资源包,我在两个不同版本的编辑器里各导了一遍,把能踩的坑基本踩齐了。这篇就聊资源包的结构怎么设计、目录怎么划分、导入参数怎么调、出了问题从哪儿查。刚接触 Unity2D 的新手能照着走一遍流程,做过几个 Demo 但资源管理一直乱糟糟的老手,也能从目录规范和参数细节里抠出点东西。
1. 先看清资源包里到底装了什么
1.1 一款文字冒险游戏的资源构成
文字冒险类游戏有个很鲜明的特点:玩法轻,内容重。玩家大把时间花在点对话框、看立绘、等转场上,画面停在屏幕上不动的时间远比动起来的时间长。这意味着资源包的重心完全压在两件事上,一是静态画面质量,二是文本与音频的表现力。
《AVG-太空之战》的设定是太空科幻,资源包里最占体积的是背景图。星云、行星带、舰队停泊港、舰桥内部、指挥室全景,每张都是 1920×1080 起步,少数全景图做到 2560×1440。这类图的特点是暗部多、渐变多,一旦被压缩算法按默认参数啃上一口,星云会直接变成一圈一圈的色带,观感崩塌得很快。
立绘部分按角色拆成身体、表情、手势三层,方便在运行时叠加切换。对话系统用到的对话框是九宫格切图,四个角和四条边各切一块,中间拉伸,这样一套图就能撑起从 400 像素到全屏宽度的不同面板。
UI 资源包括 HUD 面板、按钮三态(常态、悬停、按下)、进度条、图标集、光标。特效资源少一些,主要是跃迁引擎的粒子贴图、通讯干扰噪点、扫描线纹理。
音频分三类,BGM 是循环播放的环境音乐,通常两三分钟一首,需要精确的循环点;SFX 是点击、警报、引擎、开舱门这类短音效,几十毫秒到两三秒;还有一类是角色语音片段,数量多但每个都很短。
最后是文字资源。中文字库是个大块头,一个常用汉字齐全的字体动辄十几兆。剧本数据用外部表格导出成结构化格式,不往代码里硬写。
把这些东西搞清楚,你才知道导入的时候该重点盯什么。我的经验是,先把体积最大、最容易出问题的几类资源(背景大图、中文字体、长循环 BGM)单独列出来,优先处理,剩下的零碎资源反而好办。
1.2 动手之前必须先定下的三件事
第一件是编辑器版本和渲染管线。AVG 这种以 2D 静态画面为主的游戏,完全没必要上复杂的渲染方案,走 2D 模板加内置管线就够了,包体小、启动快、资源导入的默认值也更友好。我见过有人图省事用了 3D 模板开项目,结果每张图导入进去 Texture Type 默认是 Default 而不是 Sprite,一张张手改能改到怀疑人生。所以新建项目时选对模板,能省掉后面一大半重复劳动。
第二件是目录规范。这个必须在导第一批图之前定好,不能边导边想。目录一旦乱起来,后面找一张图要在四五个文件夹之间翻来翻去,预制体引用路径散得到处都是,改个名还连带一堆丢失引用。定规范的核心就一句话:按用途分,不按文件类型分。所有背景图放一起,所有 UI 放一起,别搞一个"png 文件夹"和一个"jpg 文件夹"。
第三件是是否接版本管理。Unity 项目里Library、Temp、Logs这几个文件夹是本地缓存,绝对不能提交;Assets和ProjectSettings必须提交;而Assets下每一个资源旁边的.meta文件,也必须一起提交。.meta里存的是 GUID,Unity 靠它认资源。你只提交图片不提交 meta,同事拉下来就是一堆引用丢失。如果资源里有大图和长音频,建议配上 Git LFS,否则仓库体积几个月就能涨到几个 G。
提示:定规范这一步看起来最没技术含量,实际上是返工成本最高的一环。目录乱了的项目,后期重构的时间比重新做一遍还长。
2. 目录结构逐层拆解
2.1 顶层目录怎么划分职责
资源包解压之后,我在Assets下只放四个顶层目录,多一个都不加。
Assets/ ├── _Project/ 项目自有资源,全部在这 ├── ThirdParty/ 第三方插件与工具 ├── Plugins/ 原生插件、平台相关库 └── StreamingAssets/ 需要以文件形式读写的资源_Project前面加下划线是有讲究的。Unity 的项目窗口默认按字母顺序排,下划线在 ASCII 里排在字母前面,加了它这个文件夹永远置顶,打开工程第一眼就能看到自己的东西,不用在插件目录里扒拉。这是个小技巧,但用久了离不开。
StreamingAssets单独说一句。AVG 的剧本数据如果需要在运行时按路径读取、或者要支持玩家替换自定义剧本,放这里最合适,因为它打包后不会被加工,原样进包。但如果剧本只是内置内容,用 ScriptableObject 或者打包进 Resources 更简单,不必占这个位置。
Resources文件夹我特意没放进来。它的机制是把里面所有资源无条件打进包体,不管用不用得上,而且加载靠字符串路径,改个文件名就可能运行时崩。项目小的时候图方便可以临时用,一旦资源量上去,包体膨胀和路径耦合会让你很难受。真要管理大量动态加载资源,正规做法是用资源寻址方案,别指望 Resources 兜底。
2.2 六个核心子目录的分工
_Project下面我拆成六个主目录,每个目录只负责一件事。
| 目录 | 存放内容 | 划分依据 |
|---|---|---|
| Art | 背景、立绘、UI、特效贴图、图集 | 按画面用途分二级目录 |
| Audio | BGM、SFX、Voice | 按播放方式和使用场景分 |
| Fonts | 字体源文件与生成的字库资源 | 与文本组件解耦 |
| Prefabs | 对话框、选项按钮、角色容器等预制体 | 按 UI 模块分组 |
| Scenes | 启动、主菜单、游戏主场景 | 与构建列表一一对应 |
| Scripts | 核心逻辑、UI 控制、剧本解析 | 按职责分层 |
Art 下面的二级目录我按用途切,不按文件格式切:
Art/ ├── Backgrounds/ │ ├── Space/ │ ├── Interior/ │ └── Common/ ├── Characters/ │ ├── Body/ │ ├── Expression/ │ └── Pose/ ├── UI/ │ ├── Panel/ │ ├── Button/ │ ├── Icon/ │ └── Cursor/ ├── VFX/ └── Atlas/这样分的好处是定位快。策划说"舰桥那张背景要换",你直接去Backgrounds/Interior,不用在几十个文件夹里猜。坏处是同一张图的不同变体可能分散,所以我又在Common里放跨场景复用的公共资源,比如通用遮罩、通用光效叠加层。
Audio 分三级:
Audio/ ├── BGM/ │ ├── Menu/ │ └── Story/ ├── SFX/ │ ├── UI/ │ ├── Environment/ │ └── Character/ └── Voice/BGM 按播放场景分,因为不同场景对循环点和音量基准要求不一样,菜单音乐要轻柔循环无缝,剧情音乐可能要配合章节切换。SFX 按触发源分,UI 音效高频短促,环境音效低频长尾,两者在导入参数上前者适合内存解压、后者适合流式,分开存方便批量设置。
Scripts 的分层就简单三个:
Scripts/ ├── Core/ 对话引擎、存档、场景流转 ├── UI/ 面板控制、按钮响应 └── Story/ 剧本数据解析、分支判定2.3 命名规范与资源索引表
目录解决"东西在哪",命名解决"这是哪一张"。我的命名公式是类型_模块_描述_状态,全用英文加下划线,不用空格、不用中文、不用特殊符号。
几个实际例子:
BG_Space_Nebula_01—— 太空背景,星云,第一版CHR_Pilot_Body_Default—— 角色飞行员,身体,默认态UI_Panel_Dialog_NineSlice—— UI 面板,对话框,九宫格SFX_UI_Click_Soft—— 音效,UI,点击,柔和版BGM_Story_Tension_Loop—— 背景音乐,剧情,紧张,循环
前缀控制在两到四个字母,一眼能看出类型,搜索的时候直接敲前缀就能过滤。中间描述部分用下划线连接单词,别用驼峰,因为文件名大小写在 Windows 上不敏感、在别的平台敏感,混合大小写容易埋雷。状态后缀用来区分不同版本,_01、_02或者_Alt、_Night,别用_final、_final2、_真的final,这种命名三个月后自己都看不懂。
另外单独维护一张资源索引表,可以是表格,也可以是一个 Markdown 文件放在项目根目录,记录每一类资源的编号规则、已用编号、对应用途。资源量上到几百个之后,没有这张表你根本记不住哪个编号被占用了。我用它来防重复,新增资源先查表,占号后登记,简单但极其有效。
3. 从零到跑通的完整导入流程
3.1 建项目时的关键设置
打开 Hub 新建项目,模板选 2D,这一步很重要。2D 模板会自动带上精灵相关的包,而且项目设置里Default Behavior Mode默认就是 2D,意味着你往工程里拖一张图,Unity 会自动按 Sprite 处理,而不是当成普通纹理。少了这一步,后面每张图都要手改 Texture Type。
如果项目已经建好了才发现是 3D 模板,也不用重建,去Edit > Project Settings > Editor把Default Behavior Mode改成 2D,再把Mode相关的新资源默认设置确认一遍,效果基本一样,只是已经导入的资源要手改一次。
项目建好后先做两件事。第一,把Project Settings > Quality里的抗锯齿关掉或者设成 2D 友好的选项,AVG 的静态图开高倍抗锯齿纯粹浪费性能。第二,确认Project Settings > Player里的默认分辨率,横屏还是竖屏、目标宽高比,这个决定了后面相机的适配方向,先定下来能避免二次调整。
3.2 三种导入方式的取舍
资源包常见两种形式,.unitypackage和压缩包里的散图。前者是 Unity 的打包格式,双击直接进 Import 窗口;后者要先解压,再把文件夹整个拖进项目窗口。
.unitypackage导入时有个细节容易被忽略:Import 窗口会列出包内所有文件,前面带勾选框。很多人图快直接点 All,结果把一个完整的示例工程连场景带脚本全导进来了,跟自己项目里的名字撞车,还会带进来一堆用不上的演示资源。正确做法是点 None 全不选,然后手动展开目录,只勾Assets/_Project下面的资源,示例场景和演示脚本一律不勾。
散图拖拽也要注意两件事。一是别把整个压缩包直接拖进去,Unity 不认,得先解压。二是别一次拖几千个文件,Unity 的导入是同步的,文件多了界面会卡死,看起来像崩了,其实它在后台跑。我的习惯是分批导,按目录来,一次一个二级目录,导完看一眼进度条走完再导下一个。
还有一种情况是从别的项目复制资源过来。这时候千万别在文件管理器里直接 Ctrl+C、Ctrl+V 到 Assets 目录,因为.meta文件如果没一起复制,Unity 会重新生成 GUID,原来所有引用这些资源的预制体和场景都会丢引用。正确方式是先在原项目里Export Package,或者确认 meta 文件一同复制。这个坑我踩过,一个对话框预制体的九宫格切图全部变成空白,排查了两个小时才发现是 GUID 变了。
3.3 贴图导入参数逐项掰开
图片导入后选中它,Inspector 里那堆参数才是决定画面生死的部分。逐个说。
Texture Type必须设成Sprite (2D and UI)。如果设成 Default,这张图就没法拖进场景当精灵用,只能当材质贴图。批量处理的办法是框选一批图,在 Inspector 里统一改,Unity 支持多选同时设置。
Sprite Mode分三种。单张图用Single,比如全屏背景;一张图里排了多个元素的用Multiple,比如图标集、按钮三态,需要在 Sprite Editor 里切;Polygon很少用,做不规则碰撞时才考虑。切割的图如果忘了设成 Multiple,拖进场景只会得到一整张图,所有元素糊在一起。
Pixels Per Unit是核心参数,默认 100。它的含义是"多少个像素算一个 Unity 单位"。一个 1920×1080 的背景,PPU 设 100,导入后的尺寸就是 19.2×10.8 个单位。这个值必须和相机的正交尺寸配合,后面第 4 节单独算。
Pivot是锚点,默认 Center。背景图用 Center 没问题;角色立绘建议改成 Bottom,这样无论立绘多高,脚底始终贴着地面,换表情换姿势不会飘;UI 元素按需要选,九宫格面板用 Center,血条用 Left。
Filter Mode要看美术风格。像素风资源设Point (no filter),放大后边缘锐利不糊;手绘、写实、渐变丰富的资源设Bilinear,缩放平滑。太空题材的星云图如果设成 Point,放大后会出现明显的方块感,很难看;反过来像素小人设成 Bilinear,整个角色会糊成一坨。
Compression默认是 Normal Quality,对背景大图来说这个压缩率偏高,暗部渐变容易出现色带。我的做法是背景图和立绘设None,靠后面的图集和包体优化来控体积;UI 小图和图标设Normal Quality,肉眼看不出来。别所有图都设 None,那样包体会失控。
Max Size是尺寸上限,默认 2048。如果原图是 2560×1440,Max Size 设 2048 会被强行缩到 2048×1152,再拉伸回原尺寸就糊了。所以导入前先看清楚原图尺寸,超过 2048 的把 Max Size 提到 4096。这个参数最容易被忽略,因为编辑器里预览是小图,看不出差别,等进了真机全屏才发现糊。
Generate Physics Shape和Extrude Edges这两个,AVG 里基本用不上碰撞,可以把物理形状关掉省点内存。Mesh Type保持Full Rect,避免 Tight 模式下精灵边缘被裁掉一点点,做缩放动画时露馅。
Alpha Is Transparency对有透明通道的图要勾上,尤其立绘和 UI 切图,不勾的话透明边缘会出现黑边或白边。
3.4 音频、字体与预制体的导入校验
音频导入后重点看三个参数。Load Type决定加载方式:短音效(点击、警报)用Decompress On Load,加载即解压,播放零延迟;长 BGM 用Streaming,边播边读,内存占用低;中等长度又要求低延迟的用Compressed In Memory。Compression Format上,短音效用PCM或ADPCM保真,长 BGM 用Vorbis压体积。Preload Audio Data对需要即时响应的音效要勾上。
BGM 的循环点是个隐藏坑。Unity 的 AudioSource 循环是按文件头尾相接的,如果音频文件开头结尾有几十毫秒静音,循环时能听出明显的断点,像喘了口气。解决办法是在音频编辑软件里把首尾静音裁干净,或者用带循环标记的格式。我一般导入后先单独循环播十遍,听不出接缝才算过。
字体方面,中文项目建议直接用 TextMeshPro。导入字体源文件后,用 Font Asset Creator 生成字库资源,字符集选常用字范围或者按剧本出现的字生成。全集生成出来的资源可能有十几兆,只生成本项目用到的字能压到一两兆。这个取舍看项目定位,如果剧本会持续扩充,全集更省心。
预制体导入后必须逐个点开检查引用。重点看三处:图片引用是否为 None、材质是否为默认材质、脚本组件是否显示 Missing。有 Missing 说明脚本没一起导进来或者命名空间对不上。预制体上如果出现洋红色,那是材质丢了或者用了不兼容当前渲染管线的着色器,得换回 Sprite 默认材质。
场景导入后去File > Build Settings把用到的场景加进列表,顺序上启动场景放第一位。不加的话打包出来一运行就是黑屏,这个错误新手极容易犯。
4. 参数背后的计算:PPU、相机与画面比例
4.1 PPU 到底怎么影响画面尺寸
这个参数值得单独拎出来讲,因为它是导入环节里最容易被"随便填个默认值"毁掉的。
Unity 的世界坐标里,1 个单位在默认情况下对应屏幕上多少像素,是由相机和 PPU 共同决定的。假设你有一张 1920×1080 的背景图,PPU 设 100,那么它在世界空间里的宽度是 1920 / 100 = 19.2 个单位,高度是 1080 / 100 = 10.8 个单位。相机如果是正交模式,Size参数表示的是"屏幕高度的一半对应多少个单位"。要让这张背景正好铺满屏幕高度,Size 应该设成 10.8 / 2 = 5.4。
如果 PPU 改成 200,背景宽度变成 9.6 个单位,高度 5.4 个单位,同样的相机 Size 5.4 就只能显示背景的一半,画面直接被放大一倍。所以 PPU 不是随便填的,它和相机尺寸是一套联动的数。
我的做法是固定一套基准:所有资源统一 PPU 100,相机 Size 按 1080 高度算成 5.4。这样任何一张 1920×1080 的图拖进来,尺寸就是严丝合缝的,不用逐个调。遇到 2560×1440 的图,PPU 设成 100 后尺寸是 25.6×14.4,比屏幕大,多出来的部分被裁掉,反而是好事,因为不同宽高比的设备上能多显示一点,不会露出黑边。
另一种常见做法是按宽度适配:把相机 Size 算成(屏幕宽度 / PPU) / 2 / 宽高比,这样宽度永远铺满,高度随设备变化。AVG 里背景铺满是刚需,我倾向宽度适配,上下多出来的部分用 UI 遮罩或者留白处理。
4.2 宽高比适配的实际处理
现在设备宽高比从 16:9 到 20:9 都有,固定一个比例必然有设备露边。我的处理方式是准备两套背景:16:9 的标准版和 20:9 的加宽版,或者干脆做一张更宽的图(比如 21:9),在窄屏设备上裁掉两侧。后者成本低、维护简单,我一般选这个。
相机组件上加一个适配脚本,在启动时根据当前屏幕宽高比计算正交尺寸,公式是:
// 以固定宽度为基准,反推相机高度 float targetWidth = 19.2f; // 设计宽度(单位) float aspect = (float)Screen.width / Screen.height; camera.orthographicSize = targetWidth / aspect / 2f;这段逻辑放在启动场景的相机上,只跑一次。如果做竖屏版本,把固定宽度改成固定高度,公式反过来即可。
4.3 图集打包与绘制调用
UI 资源数量一多,每一张小图都单独占一次绘制调用,性能会掉。解决办法是打图集。在Assets下右键Create > 2D > Sprite Atlas,把同一批 UI 图拖进 Objects 列表,勾上Include in Build,运行时 Unity 会自动把这些图合成一张大图,绘制调用直接合并。
图集划分有讲究,别一股脑全塞一张。我的分法按"同屏共存"原则:对话框、按钮、图标这些经常同时出现在一个界面上的放一张;角色立绘和背景不常同框,分成另一张;特效贴图单独一张。这样每张图集都不大,加载和卸载也灵活。
还有一点,图集里的图不能再用None压缩,否则图集本身膨胀得厉害。图集资源上单独设压缩参数,通常Normal Quality就够,因为图集里的图都是小尺寸,压缩损失不明显。
5. 导入阶段的高频问题与排查实录
5.1 图片发糊、锯齿与拉伸变形
画面糊是最常见的问题,成因有四种,按排查顺序来。
先看Max Size,原图尺寸超过上限被缩了,这是头号嫌疑。再看Compression,渐变多的图被强压后色带明显。第三看Filter Mode,像素风资源误设成 Bilinear 会糊。最后看PPU 和相机 Size 是否匹配,不匹配相当于图片被非整数倍缩放,任何缩放算法在这种情况下的表现都不好。
排查方法很简单:把图拖进场景,选中相机,在 Scene 视图里按 1:1 比例观察。如果 1:1 下清晰,缩放后糊,那是缩放比例问题;如果 1:1 下就糊,那是导入参数问题。
拉伸变形通常是 PPU 设错或者图片被非等比缩放。比如把一个 200×100 的按钮图拖进 UI,RectTransform 上手动拉了宽度,宽高比破坏,按钮就变形了。UI 元素建议用Image组件配合Preserve Aspect,或者严格按原始宽高比设置尺寸。
5.2 精灵切割错位与锚点偏移
Multiple 模式切割的图,切完之后拖进场景发现每个小块的位置都不对,原因是切割时用了Automatic自动识别,而图片里的元素排列不规则,自动算法给出的矩形边界偏了一点。
解决办法是切成Grid By Cell Size,手动填每个格子的像素尺寸,前提是原图排版规整。如果排版不规整,就得在 Sprite Editor 里手动拉框,一个个调。这个活费时间但必须做,切歪了后面所有引用都歪。
锚点偏移是另一个高频问题。一个 100×100 的按钮图,Pivot 默认 Center,如果 UI 布局时按左上角对齐来写坐标,就会出现整体偏 50 像素的错觉。我的习惯是 UI 元素统一用 Center,角色立绘用 Bottom,导入时就设好,不要等到布局阶段再逐个改。
5.3 预制体洋红与引用丢失
预制体上出现洋红色块,说明材质丢了。Sprite 渲染器默认用Sprites-Default材质,这个材质在 2D 模板里是内置的。如果项目用了别的渲染管线,或者材质被误删,Sprite 就会渲染成洋红。
修复方法:选中预制体上的 Sprite Renderer,把 Material 拖回Sprites-Default。批量修复可以写个编辑器脚本遍历所有预制体,检查材质是否为 null 并回填。
引用丢失表现为 Inspector 里对应字段显示 None 或者 Missing。原因通常是资源被移动了位置但 meta 没跟着走,或者跨项目复制时光标没复制 meta。修复靠手动重新拖引用,预防靠版本管理时把 meta 一起提交。
5.4 音频没声音与循环断点
编辑器里能播、打包后没声音,八成是压缩格式的问题。某些平台的音频解码对特定格式支持不好,把Compression Format换成Vorbis或者PCM逐项试。
另一个原因是Load Type设成了Streaming,但音频文件放在一个会被卸载的资源目录里,播放时文件已经没了。流式加载的音频要确保整个播放期间资源常驻。
循环断点前面提过,用音频软件裁掉首尾静音。还有一个更隐蔽的情况:文件本身首尾没有静音,但采样率不是标准值,某些设备上解码后多出几毫秒。这种情况只能换文件,或者接受这一点点瑕疵。
5.5 中文路径与特殊字符的隐患
Unity 对中文路径的支持在逐年改善,但插件和打包工具不一定跟得上。我的原则是工程路径、资源路径全部用英文,一个中文字符都不留。项目放到桌面或者中文用户名下的文件夹里,也可能在打包环节出问题,最好把工程放在纯英文路径下。
文件名里的空格、括号、井号、百分号也是雷区。井号在 URL 里是锚点标记,某些加载逻辑会把它截断;括号在命令行参数里有特殊含义。统一换成下划线,省心。
5.6 资源重复与包体膨胀
导完资源发现包体比预期大了一倍,先去Console里看有没有重复资源的警告,再去Build Report里看哪些资源占了大头。
常见的重复来源是同一张图被不同目录各放了一份,Unity 不会自动去重,两份都进包。另一个来源是 Resources 文件夹滥用,把用不上的资源也打进去了。还有一个隐蔽来源是图集和原图同时进包,原图如果还被别处引用就不会被剔除,等于存了两份。
处理办法是导入完成后跑一次资源引用检查,找出没有被任何场景或预制体引用的孤立资源,该删的删。这个检查可以手写编辑器脚本,也可以借助现成的工具。
5.7 问题速查表
| 现象 | 最可能原因 | 处理动作 |
|---|---|---|
| 图片放大后出现方块 | Filter Mode 设成了 Point | 改为 Bilinear |
| 图片边缘发虚、模糊 | Max Size 被限制或压缩过重 | 提高 Max Size,压缩改 None |
| 精灵切出来位置偏 | 自动切割边界不准 | 改用 Grid 或手动拉框 |
| 角色立绘换表情时抖动 | Pivot 不一致 | 统一设 Bottom 或同一锚点 |
| 预制体洋红 | 材质丢失 | 回填 Sprites-Default |
| 预制体字段显示 None | 资源移动导致引用断 | 重新拖引用并检查 meta |
| 打包后音频无声 | 压缩格式不兼容 | 换 Vorbis 或 PCM 试 |
| 循环音乐有断点 | 首尾有静音 | 裁掉静音,重新导入 |
| 打包后黑屏 | 场景未加入构建列表 | Build Settings 添加场景 |
| 包体异常大 | 资源重复或 Resources 滥用 | 查引用,清理孤立资源 |
5.8 我踩得最深的一个坑
有次导入完一批背景图,编辑器里看着一切正常,打包到设备上一运行,所有背景全是黑屏,只有 UI 正常显示。查了半天,最后发现是 Max Size 的问题:那批图原尺寸 2560×1440,Max Size 默认 2048,导入时被缩小了。在编辑器里因为预览窗口小,看不出来;到设备上全屏显示时,Unity 把被缩小的图再拉伸回全屏,纹理采样器在暗部提取出了全黑。
这个问题的隐蔽之处在于,编辑器里永远看不出异常。教训是:导入完成后,专门做一次设备端验证,别只在编辑器里看。我现在养成了习惯,每导完一批大图,打个包上真机跑五分钟,看看背景、立绘、UI 有没有异常,比在编辑器里反复检查可靠得多。
6. 几句关于资源管理的实在话
资源导入这件事,技术含量看起来不高,但它决定了后面几个月你每天找文件时的体验。我最早的几个项目就是随手拖、随手放,结果做到一半,找一张三周前导进来的星空图翻了十分钟,最后发现它躺在一个叫"新建文件夹(2)"的目录里。从那以后我才开始认真做目录规划。
现在我的习惯是,资源包拿到手先别急着往工程里倒,先解压出来在系统文件管理器里过一遍,看清楚有多少类、有多少个、命名乱不乱。花二十分钟整理命名,比后面花两天排查引用问题划算得多。整理完再按目录分批导入,每批导完立刻验一次参数,大图看 Max Size,透明图看 Alpha,音效听循环,预制体点开看引用。
还有一点值得提,资源索引表这个习惯救过我很多次。项目做到第三个版本,策划要找回第一版用过的某个按钮样式,我查表直接定位到文件名和目录,两分钟解决。没有这张表,那就只能靠记忆和搜索碰运气。
至于参数,别迷信默认值。Unity 的默认参数是给通用场景设计的,AVG 有自己的一套需求:大图要清晰、UI 要合批、音频要省内存。这三条决定了你几乎每个关键参数都得手动调一遍。调的时候记下为什么这么调,写在索引表旁边,下次换项目直接复用,效率能翻倍。