Unity工程结构与编辑器背后的工作-Behind The Editor

mac2026-05-22  4

本文介绍的工程结构为Unity工程的结构而非Assets下各种不同的文件夹,基于Unity+VS,总结如何对工程进行版本控制,同时会讲述在资源导入时编辑器(引擎的资源系统)在背后的一些工作;另外,本文主要来自于各种网站资源以及书籍资料的总结,文末会备注出处;

一、工程结构

主要介绍一下四个文件夹:Assets、ProjectSettings、Library、Temp/Obj;主要是因为这几个文件夹互相密切关联,当创建一个工程时,Unity会自动创建如下几个文件夹;

Assets:工程的资源目录,一个工程需要大量的数据,包括各种外部导入的数字文件,如纹理、模型、动画等等;所有导入的资源都需要放置在该目录下,在导入资源时,许多由第三方软件开发的资源都有其原生的一些数据格式,如ps的psd,3dmax的max等等,unity引擎不可能直接去读取这些原生的数据格式,所以,在导入时需要将其转换成unity可以直接使用的内置格式,这一步几乎是所有引擎的资源系统都要做的转换工作,主要原因在于:我们既要不损坏原来的资源文件,又要快速地读取这些文件;

如何转换?在进行转换时,unity引擎提供了一些导入时的配置选项,比如导入一个纹理,可以在Inspector下设置Texture Type,Wrap Mode等,导入一个FBX Model文件,可以设置Rig、Animation等;在Assets下选中一个资源时,我们可以在Inspector面板中修改器导入配置,引擎会将一个资源的导入配置存放到相应的meta文件中,了解unity的meta文件可参考Unity meta文件是什么,这种为资源文件配置相应的meta元文件的方式也是引擎资源系统常用的方式;在进行转换工作时,只需要根据meta的导入配置和ProjectSettings(随后讲到)来完成操作;

一些资源的导入会导致多个资源被创建,主要发生场景如下:

一个3D文件,例如嵌入了材质和纹理的FBX文件,在导入时引擎会将材质和纹理分离为单独的资源;

一个图像文件导入为多个精灵

一个3D文件包含了多个分离的动画片段,unity会将其分离成单独的Animation Clip资源;

什么时候转换?我们不可能在游戏开始运行时去做这些导入的转换工作,事实上我们只需要在导入时做一次转换工作,并将其保存下来,随后引擎就会使用这个“准备好”的资源版本,而这些“准备好”的版本就是放置到Library文件夹下的;

ProjectSettings文件夹:工程文件夹下存储一系列.asset格式的文件,用于保存各种工程配置;在编辑器界面的Edit->ProjectSettings下我们可以进行各种配置,随后会将各种结果保存到该文件夹下的各文件中;

Library文件夹:刚刚上面已经介绍了该文件夹的产生,它就是导入后的资源的本地缓存;

Temp/Obj文件夹:Temp即temporary暂存的肆意,存储的是工程构建时生成文件;

版本控制:一个工程只需要拥有Assets和ProjectSettings文件夹,工程的数据就是完整的,其它文件夹的内容是引擎根据这两个文件夹生成的;因此,版本控制,只需要记录Assets和ProjectSettings文件夹下的内容,其它文件夹如Library都应该被ignore;

二、参考资料

1.Unity Manual-Behind the Scenes,官方对meta文件的描述

2.为什么Library文件夹不是必须的

3.Unity Learn-讲述工程结构

4.Unity引擎可用的各种资源格式(非常详细)

最新回复(0)