当前位置: 代码迷 >> C# >> 【Unity】2.3 项目浏览器跟资源的组织
  详细解决方案

【Unity】2.3 项目浏览器跟资源的组织

热度:555   发布时间:2016-04-28 08:20:44.0
【Unity】2.3 项目浏览器和资源的组织

分类:Unity、C#、VS2015

创建日期:2016-03-29

一、Project—工程浏览器

前面我们说过,Unity中的Project View(称为工程浏览器)相当于VS2015中的解决方案资源管理器(Solution),Unity的每个工程中可包含多个关卡(*.unity),每个关卡都是一个可独立运行的项目,根据发布的目标平台不同,编译后生成的可执行程序的扩展名也不同,例如对于Windows平台生成的可执行程序是(.exe文件),对于在Windows平台下运行的浏览器(Web)生成的是动态链接库(.dll文件),对于Android平台生成的是(.apk文件)。而VS2015是一个解决方案资源管理器(Solution)下可包含多个项目(Project),在Windows平台上,每个项目根据创建的模板不同,编译后生成的文件也不同,或者说,生成的可能是一个可独立执行的程序(.exe文件),也可能生成的是一个可被其他程序调用的动态链接库(.dll文件)。

总之,虽然英文都叫Project,但含义不同。为了容易区分,在中文翻译中一般将Unity的Project称为工程,将VS2015中Solution下的Project称为项目。

Unity中Project下的各种资源和脚本都是通过文件夹来分类的,所以叫工程浏览器。这些文件夹下的资源和源程序相当于VS2015解决方案资源管理器(Solution)中每个项目(英文也是Project)下的各种资源和源程序,区别是VS2015是先通过项目类别来区分,然后再通过项目下的文件夹和命名空间来分类,而不是仅通过文件夹来分类。

可这样来理解Unity和VS2015两者之间的概念:

Unity VS2015

名称 Poject(工程) 解决方案资源管理器(.sln)

项目 Poject下的文件夹 解决方案资源管理器中项目下的文件夹

用途 管理各种资源和脚本 管理各种资源和源程序

文件管理 关卡文件(*.unity) 项目文件(.csproj)

资源 Assets Resources

逻辑控制 脚本(.cs文件) 源程序(.cs文件)

理解这些含义的最好办法就是打开安装Unity时自带的示例工程,然后观察对应视图以及视图下的文件夹和文件。

下图是打开安装Unity时自带的示例工程后的Project视图:

image

Project视图以ListView的形式显示工程的结构。点击列表中的文件夹后,内容就立即显示在右侧视图中。其中单个资源显示为图标,并标明其类型(脚本、材质、子文件夹等)。移动视图下方的滑块可调整图标大小。如果滑块移至最左侧,会被ListView的另一种视图形式替代。

表示工程结构的ListView的上方是收藏夹 (Favorites) 部分,用于保存经常使用的项,以方便以后访问。

可将工程结构列表中的项直接拖动至收藏夹 (Favorites)来收藏它。

Project下方的下拉框用于创建各种资源,其功能与主菜单Assets下的Create子菜单的功能相同,用于给现有文件夹添加新资源和子文件夹。

窗口 (Window) 菜单中有一个选项,可供转换至工程视图单列版,单列视图基本上只有层级结构列表,无图标视图。菜单旁的锁定图标可“冻结 (freeze)” 视图中的当前内容(如防止被其他地方的事件更改),其用法与检视器 (Inspector) 锁定的用法类似。

1、常用的快捷方式

当工程浏览器视图有焦点时,快捷方式可用。下面是常用的快捷方式:

Ctrl+A 选择列表中的所有可见项目

Delete 弹出对话框后删除

Shift+Delete 不弹出对话框而直接删除

Enter 打开所选资源

2、场景 (Scenes)

一般在Assets文件夹下的Scenes子文件夹下包含不同的场景文件(*.unity),这些文件包含了各种游戏对象,可利用它创建主菜单、独立关卡等等。

image

Unity将每个唯一的场景 (Scene) 文件都视作一个关卡。在每个场景 (Scene) 中,可放入环境、障碍和装饰物等。

创建场景:File-->New Scene

保存场景:File-->Save Scene

3、实例化预设 (Prefabs)

一般用Prefabs文件夹保存各种预设文件。

image

创建一个预设 (Prefab) 后,即可轻松、快速创建该预设 (Prefab) 的副本,每个副本都称为一个实例 (Instance)。

要创建预设的副本,可从工程视图 (Project) 中将预设文件夹下的预设直接拖放到层次视图 (Hierarchy) 或场景视图 (Scene) 中。

有了预设 (Prefab) 的实例以后,就可随意放置和调整它。

4、添加组件 (Component) 和脚本 (Scripts)

一旦有了一个预设 (Prefab) 或高亮的游戏对象 (GameObject) ,就可以使用组件 (Components) 为其添加其他功能。

要添加一个组件,只需要从游戏对象 (GameObject) 中的组件 (Component) 菜单中选择一个组件 (Component)。之后,就会看到组件 (Component) 出现在游戏对象的检视器 (Inspector) 中。

image

脚本 (Scripts) 也是一种组件。

如果添加的组件切断了游戏对象 (GameObject) 与预设 (Prefab) 的联系,可使用菜单中的游戏对象 (GameObject)->将变更应用至预设 (Apply Changes to Prefab) 重新建立连接。

5、放置游戏对象 (GameObject)

当将一个游戏对象 (GameObject) 放入场景后,就可以使用快捷工具栏的【转换工具】 (Transform Tools) 将其放在任意位置。

此外,可利用检视器 (Inspector) 中转换 (Transform)选项卡下的值来微调游戏对象的位置和旋转角度。

6、使用相机 (Cameras)

相机 (Cameras) 是游戏的眼睛。玩家玩游戏时看到的所有内容都是通过一台或多台相机(Camera对象)来展示的。

image

可像任何其他游戏对象 (GameObject) 一样放置、旋转和父子化相机。由于相机是一个带相机组件 (Camera Component) 的游戏对象(GameObject)。因此,它除了具有常规游戏对象 (GameObject) 的功能以外,还有一些相机特定的功能。

脚本 (Scripts) 资源包中安装了一些有用的相机 (Camera) 脚本。创建新工程时可同时安装脚本 (Scripts) 资源包,或通过选择菜单的Assets-> Import Package来实现。

image

导入的脚本可在菜单中的Components-> Camera-Control 中找到。

image

7、光源 (Lights)

除了一些极少数情况,一般都需要在场景中添加光源 (Lights)。

双击Scenes下的Car,可观察已经添加的光源:

image

光源类型共有三种,每种各有不同。最重要的是它们为游戏增添气氛和感觉。不同光源可完全改变游戏的情境,有效使用光源将是一个重要的学习课题。

本章后面还会用专门的一节来介绍它。

二、Assets—保存和组织各种资源

Project下的Assets文件夹用于保存和组织Unity工程中的各种资源。

image

1、资源工作流程

这里介绍的在Unity中使用单个资源的步骤都是通用的步骤,只是概述了基本操作。例如,三维 (3D) 网格的使用。

2、创建粗糙资源

你可以使用任何支持的三维 (3D) 的建模软件创建一个粗糙的资源。例如采用3Dmax、Maya等。后面的章节中还会单独介绍可导入哪些建模模型。

3、创建和更新资源

如果您正在创建游戏并需要添加任意类型的新资源,您只需创建此资源并将其保存在资源 (Assets) 文件夹下。当您返回或启动 Unity 时,添加的文件就会被自动检测到并自动导入到Unity工程中。

image

另外,当你在本机上通过3Dmax、Maya等软件中更新和保存资源时,Unity还可以自动检测到所做的更改并重新导入更改后的资源。这可以让你集中精力优化资源,而不必担心资源与Unity之间的不一致问题。

(1)默认值

在某些导入程序上,您可以为字段引用或相似事务指定默认值。要指定默认值,请在需要设置默认值的字段上打开对象选择器 (object selector),然后在对象选择器上选择一个值。

(2)资源类型

这里有一些基本的资源类型可供你创建游戏。包括:

(a)网格文件 (Mesh Files) 和动画 (Animations)

无论使用哪种三维资源包,Unity都会从每个文件中导入网格和动画。

仅为了使用网格(Mesh)文件时不需要导入动画。如果使用动画,可以选择从单个文件导入所有动画或逐个导入包含每个动画的文件。

将网格(Mesh)导入到Unity后,就可以将其拖至场景(Scene)或层级视图(Hierarchy)来创建网格的实例。也可以将组件(Components)添加至实例,而不会作为附件添加至网格文件本身。

Unity将使用UV(即:二维纹理贴图)和大量默认材质 (Materials)(每个UV对应一种材质)来导入网格(Mesh)。这样你就可以将对应的纹理文件分配到材质,然后在Unity游戏引擎上填充网格的外观。

(b)纹理文件(Texture Files)

Unity支持所有图像格式。即使是分层的Photoshop文件也一样可以导入,而且不会损坏Photoshop的原始格式。这可让你轻松无忧地处理单个纹理文件,获取精简流畅的体验。

注意:使用的纹理尺寸应该是2的升幂(如32x32、64x64、128x128、256x256 等),否则可能会导致加载、处理都变慢以及可能会出现马赛克等负面效果。

要导入纹理,只需将纹理放入工程的资源(Assets)文件夹下,此时纹理就会自动显示在工程视图(Project View)中。

另外,你需要将纹理分配到材质中,然后才可将材质运用到网格(Mesh)、粒子系统 (Particle System) 或 GUI 纹理 (GUI Texture)。

使用导入设置 (Import Settings) 也可将纹理转换为游戏中不同应用类型的立方体贴图 (Cubemap) 或法线贴图 (Normalmap)。

4、导入资源

初次保存资源时,应将其按常规保存在Project下的资源(Assets)文件夹下。这样做的好处是打开Unity工程后,Unity就会检测到该资源并自动将其导入到工程中。

注意,Unity使用所用建模软件(如3Dmax、Maya等)提供的FBX导出功能将模型转成FBX文件格式,因此要求这些软件要有FBX导出包,以供Unity自动调用。

也可以在应用程序中直接导出为FBX并保存到工程(Project)文件夹下。

将文件添加至工程文件夹的资源 (Assets) 文件夹后,Unity会自动检测到这些文件。将任何资源 (Assets) 放入资源文件夹后,资源 (Assets) 也都会自动显示在工程视图 (Project View) 中。

整理工程视图 (Project View) 时,请务必记住以下非常重要的事项:

切勿在Unity的管理之外移动任何资源或整理此文件夹。必须始终使用工程视图 ( Project View) 进行上述操作!

这是因为Unity 中存储了大量资源文件之间的关系元数据。这些数据用于Unity可在何处找到这些资源。如果你在工程视图 (Project View) 内移动资源,这些关系都会保留。如果在 Unity 外移动资源,则将破坏这些关系。

另外,如果在工程视图 (Project View) 中选择资源,该资源的导入设置会自动出现在检视器 (Inspector) 中。显示的选项将根据所选资源的类型自动更改。

image

(1)在场景中添加资源

只需单击工程视图 (Project View) 中的网格(Mesh)并拖动至层级视图 (Hierarchy) 或场景视图 (Scene View),便可将其添加至场景 (Scene) 中。

将网格(Mesh)拖到场景中时,将创建一个带网格渲染器 (Mesh Renderer)组件 (Component) 的游戏对象 (GameObject)。

如果要使用纹理或声音文件,需要将其添加到场景 (Scene) 或工程 (Project) 中已经存在的游戏对象 (GameObject)中。

(2)将不同资源放到一起

以下简述了最常用资源之间的关系。

(a)将纹理 (Texture) 应用于材质 (Material)

可将材质 (Material) 应用于游戏对象(GameObject),应用后该对象就变成了带网格渲染器的组件(Mesh Renderer Component)。

可将动画 (Animation) 应用于游戏对象 (GameObject),应用后该对象就变成了带动画的组件 (Animation Component))

可将声音文件应用于游戏对象 (GameObject),应用后该对象就变成了带声音源的组件 (Audio Source Component))

(b)创建预设

预设 (Prefabs) 是可重复用于场景中的游戏对象 (GameObject) 和组件 (Component) 的集合。

一个预设 (Prefab) 可创建多个相同对象,称之为实例化。比如树,创建一个树预设 (Prefab) 可以实例化多棵相同的树并将其放入场景中。所有树都与预设 (Prefab) 链接在一起,所以对预设 (Prefab) 所做的任何更改都将自动应用到所有树的实例当中。如果想更改网格、材质或任何其他项,只需一次性在预设 (Prefab) 中更改,然后所有其他树都会继承这些更改。也可更改一个实例,然后选择主菜单上的游戏对象 (GameObject)->将变更应用至预设 (Apply Changes to Prefab),这可节省许多设置和更新资源的时间。

如果游戏对象 (GameObject) 包含多个组件 (Component) 和子游戏对象 (GameObject) 层级,可在顶级游戏对象 (GameObject)(或根 (root))中创建一个预设 (Prefab),再使用整个游戏对象 (GameObject) 集合。

可以将预设 (Prefab) 当成游戏对象 (GameObject) 结构蓝图。所有预设 (Prefab) 克隆体都和蓝图相同。如果蓝图更新,那么所有克隆体也将更新。更新预设 (Prefab) 本身有多种方式,可通过更改其克隆体之一并将更改应用至蓝图实现。有关预设 (Prefab) 的使用和更新的更多内容,请浏览预设 (Prefabs) 页面。

要从场景的游戏对象 (GameObject) 中真正创建一个预设 (Prefab),只需将游戏对象 (GameObject) 从场景拖到工程中,您会看到游戏对象 (Game Object) 的名称文字变蓝,为新预设 (Prefab) 任意命名。现在,您已创建可重复使用的预设 (Prefab)。

(3)更新资源

您已经导入、实例化资源并链接至预设 (Prefab)。想要编辑源资源时,只需在工程视图 (Project View) 中双击它。相应的应用程序将会启动,可随意进行更改。更新完成后保存。之后,切换回 Unity 时将检测到该更新,资源会被重新导入。资源到预设 (Prefab) 的链接也将保留。看到的效果就是预设 (Prefab) 将更新。以上即为更新资源的所有必要信息。打开并保存即可!

(4)给资源添加标签【可选】

如果想让所有资源保存有序状态,给资源添加标签始终是个好办法。有了标签,便可在工程视图或对象选择器的搜索栏中搜索每个资源相关的标签。

给资源 (Asset) 添加标签 (Label) 的步骤:

(从工程视图 (Project View) 中)选择想要添加标签的资源 (Asset)。

如果该资源无任何相关联的标签 (Labels),则在检视器中单击“添加标签 (Add Label)”。

如果资源有相关联的标签,则单击标签 (Labels)所在。

开始写标签 (Labels)。

注意:

(a)任何资源可带一个以上标签。

(b)要分割/创建标签,只需在写资源标签名时按enter键。

  相关解决方案