【Unity】2.4 层次视图(Hierarchy)

分类:Unity、C#、VS2015 浏览器

建立日期:2016-03-29 编辑器

1、简介

层级视图 (Hierarchy) 包含当前场景中的每一个游戏对象 (GameObject)。有些是三维模型等资源文件的直接实例,其他是预设(Prefabs)实例,自定义对象构成游戏的绝大部分。可在层级视图(Hierarchy)中选择对象并将一个对象拖到另外一个对象内,以应用父子化(Parenting)。在场景中添加和删除对象后,还将在层级视图 (Hierarchy) 中显示或消失。 ide

2、游戏对象(GameObjects)

游戏对象 (GameObjects) 是 Unity 中最重要的对象。了解什么是游戏对象 (GameObject) 及如何使用相当重要。 学习

一、什么是游戏对象 (GameObjects)? 测试

游戏中的每一个对象都是一个游戏对象 (GameObject)。然而,游戏对象 (GameObjects) 自己不作任何事情。它们须要特殊属性 (special properties) 才能成为一个角色、一种环境或者一种特殊效果。可是每一个对象要作不少不一样的事情。 3d

若是每一个对象都是一个游戏对象 (GameObject),咱们该如何区分静态空间 (static room) 中的交互式启动对象 (interactive power-up object) 呢?是什么使得这些游戏对象 (GameObjects) 互不相同? orm

答案是:游戏对象 (GameObjects) 是一种容器。它们是空盒,可以容纳组成一个光照贴图的岛屿或物理驱动的小车的不一样部分。所以,要真正理解游戏对象 (GameObjects),就必须了解这些组成部分(称为“组件 (Components)”)。根据您要建立的对象类型,您能够添加不一样的组件 (Components) 组合到游戏对象 (GameObject) 中。想象一个游戏对象 (GameObject) 是一口空烹饪锅,组件 (Components) 是不一样的做料,它们构成了您的游戏食谱。您也可使用脚本 (Scripts) 制做本身的组件 (Components)。 对象

(1)游戏对象 (GameObject) 和组件 (Component) 的关系 blog

如以前在游戏对象 (GameObjects) 中所述,游戏对象包含组件 (Components)。 排序

下面经过游戏对象 (GameObject) 及其最多见的组件 (Component) - 变换组件 (Transform Component) 来探讨这种关系。

打开任意 Unity 场景,而后为其建立一个新的空游戏对象 (GameObject),选择该游戏对象并在检视器 (Inspector) 中查看它的属性。

image

注意,即便是一个空的游戏对象 (GameObject),它仍然会包含一个名称(Name)、一个标签(Tag)和一个层(Layer)。另外,每一个游戏对象(GameObject)还包含一个变换组件(Transform Component)。

(2)变换组件 (Transform Component)

记住:在Unity中建立一个没有变换组件(Transform Component) 的游戏对象是不可能的。

变换组件(Transform Component) 是最重要的组件(Components) 之一,由于全部游戏对象 (GameObject) 的变换 (Transform) 属性均由此组件启用。在游戏世界/场景视图 (Scene View) 中,它定义了游戏对象 (GameObject) 的位置、旋转和缩放。若是一个游戏对象 (GameObject) 没有变换组件 (Transform Component),它只是计算机内存中的一些信息,实际上并不存在于场景世界。

变换组件 (Transform Component)还会启用称为“父子化 (Parenting)”的概念,它是应用游戏对象(GameObjects) 的关键,可经过 Unity 编辑器 (Unity Editor) 使用它。

(3)其余组件 (Components)

变换组件 (Transform Component) 是全部游戏对象 (GameObjects) 的关键组件,因此每一个游戏对象 (GameObject) 都有一个。除此以外,游戏对象还能够包含其余组件 (Components)。

image

以主相机游戏对象 (Main Camera GameObject) 为例,你能够看到,它包含了组件 (Components) 的不一样集合。具体来讲,包含一个相机组件 (Camera Component)、一个GUI层(GUI Layer)、一个光晕层(Flare Layer)和一个音频侦听器 (Audio Listener)。全部这些组件为游戏对象 (GameObject) 提供了各类功能。若是没有这些组件,就没法为玩家渲染出任何游戏图形!

刚体、碰撞组件、粒子和音频都是不一样的组件 (Components)(或其组合),均可以添加到任何特定的游戏对象 (GameObject) 中。

三、父子化 (Parenting)

Unity 采用父子化 (Parenting) 这一律念。使任何游戏对象 (GameObject) 成为另外一对象的子对象,将欲移动的子对象拖到层级视图 (Hierarchy) 的父对象中。子对象会继承父对象的移动和旋转路径。可根据须要点击父对象的折叠箭头,显示或隐藏子对象。

四、停用游戏对象 (GameObjects)

可利用游戏对象 (GameObject) 的激活复选框将一个游戏对象 (GameObject) 标记为“不活动”,以便暂时将其从场景中删除。使用脚本中的 activeSelf 属性或检视器中的激活复选框可实现该目的:

image

(1)停用父游戏对象 (GameObject) 的影响

停用父对象时,停用也将覆盖全部其子对象上的 activeSelf 设置,所以,父级如下的整个层次结构都处于不活动状态。注意,这不会更改子对象上 activeSelf 属性的值,因此在父对象从新激活时,子对象会恢复到原始状态。这意味着,经过子对象的 activeSelf 属性没法肯定其在场景中当前是否处于活动状态。所以,你应当使用 activeInHierarchy 属性,该属性会将父对象的覆盖效果考虑在内。

(2)不要使用SetActiveRecursively

早期版本中有一个称为 SetActiveRecursively 的功能,可用于激活或停用给定父对象的子对象。为避免破坏旧代码,虽然保留了低版本API中的SetActiveRecursively,但不建议使用,未来还可能会将其删除。

在特殊状况下,好比你想更改子对象的 activeSelf 设置,能够用如下C#代码来实现:

void DeactivateChildren(GameObject g, bool a)

{

g.activeSelf = a;

foreach (Transform child in g.transform)

{

DeactivateChildren(child.gameObject, a);

}

}

3、使用组件 (Components)

在游戏中,组件 (Components) 就是对象和行为的螺栓与螺母,它们是每一个游戏对象 (GameObject) 的功能零件。若是您还不了解组件 (Components) 与游戏对象 (GameObjects) 之间的关系,请在进一步学习以前先阅读游戏对象 (GameObjects)的介绍。

一、组件 (Component) 和脚本 (Script) 的关系

建立脚本并将其链接到游戏对象 (GameObject) 时,脚本会出如今游戏对象 (GameObject) 的检视器 (Inspector) 中,它看起来就像一个组件 (Component)。这是由于脚本在保存时实际上就是变成了组件 (Components) - 但脚本只是一种特定类型的组件 (Component)。在技术层面上,脚本会编译为某种类型的组件 (Component),Unity 引擎会将其像其余组件同样对待。所以,脚本实际上就是你本身建立的一个组件 (Component),是在检视器 (Inspector) 中列出的一个元素,它会执行你写出的任何功能。

二、添加组件 (Components)

你能够经过组件 (Components) 菜单向所选游戏对象 (GameObject) 添加组件 (Components)。

例如,为新建的空游戏对象 (GameObject) 添加一个刚体 (Rigidbody)的步骤是:选中该游戏对象,而后从菜单选择“组件 (Component)->物理 (Physics)->刚体 (Rigidbody)”。当你操做时,你会看到刚体 (Rigidbody) 属性出如今检视器 (Inspector) 中。

若是在空游戏对象 (GameObject) 仍被选中时按“播放 (Play)”,你可能还会获得一个小惊喜。试一试,注意观察刚体 (Rigidbody) 是如何将功能添加到空游戏对象 (GameObject) 的。(游戏对象 (GameObject) 的 Y 坐标值开始减少,这是由于 Unity 的物理引擎致使游戏对象 (GameObject) 在重力的做用下下落。

另外一种选择是使用组件浏览器 (Component Browser),使用对象检视器中的“添加组件(Add Component)”按钮可激活该浏览器。

该浏览器可以让您按类别方便地导航组件,还具备搜索框,您能够用此框按名称定位组件。

您能够将任意数量或组合的组件 (Components) 添加到单一的游戏对象 (GameObject)。有些组件 (Components) 与其它组件结合起来可发挥最佳做用。例如,刚体 (Rigidbody) 可与任何碰撞组件结合使用。刚体 (Rigidbody) 经过 NVIDIA PhysX 物理引擎来控制变换 (Transform),碰撞组件 (Collider) 则容许刚体 (Rigidbody) 与其余碰撞组件 (Colliders) 碰撞和相互做用。

三、编辑组件 (Components)

组件 (Components) 的一个重要方面是灵活性。将一个组件 (Component) 链接到游戏对象 (GameObject) 时,该组件 (Component) 有不一样的值或属性 (Properties),这些值或属性在构建游戏时能够在编辑器里调整,或者在运行游戏时由脚原本调整。

有两种主要类型的属性(Properties):值(Values) 和引用(References)。

观察以下截图,它是一个具备音频源(Audio Source)组件 (Component) 的空游戏对象 (GameObject)。检视器中音频源(Audio Source)的全部值均为默认值。

image   image

该组件 (Component) 包含一个引用 (Reference) 属性和七个值 (Value) 属性。音频剪辑(Audio Clip)是引用 (Reference) 属性。音频源 (Audio Source) 开始播放时,它将尝试播放音频剪辑(Audio Clip)属性中引用的音频文件。若是没有引用,则将出现错误,由于没有可播放的音频。

要在检视视图 (Inspector) 中引用文件很是简单,只需从工程视图(Project)中将音频文件拖到引用属性 (Reference Property) 上便可,或者使用对象选择器 (Object Selector) 来完成。

组件 (Components) 能够将引用属性包含到任何其余类型的组件 (Component)、游戏对象 (GameObjects) 或资源 (Assets)。

音频剪辑 (Audio Clip) 上的其他属性都是值 (Value) 属性,这些属性能够直接在检视器 (Inspector) 中调整。音频剪辑 (Audio Clip) 上的值 (Value) 属性都是切换、数值、下拉字段,不过值属性也能够是文本字符串、颜色、曲线和其余类型。

四、复制和粘贴组件 (Component) 设置

组件 (Component) 的上下文菜单包含一些用于复制和粘贴其设置的项目。

image

使用“粘贴组件值(Paste Component Values)”菜单项,可将复制值粘贴到现有组件。或者可使用“将组件粘贴为新组件(Paste Component As New)”,建立具备这些值的新组件 (Component)。

五、测试属性 (Properties)

当游戏处于播放模式时,能够在任何游戏对象 (GameObject) 的检视器 (Inspector) 中随意更改属性。例如,你可能想测试不一样高度的跳跃。若是在脚本中建立一个跳跃高度属性,则能够进入播放模式更改该值,而后按下跳跃按钮看看发生了什么。而后再次更改该值,并在接下来的几秒看看结果。

一旦退出播放模式,属性将恢复到播放模式前的数值,这样就不会丢失任何工做。

六、更改组件 (Components) 的顺序

在大多数状况下,检视器 (Inspector) 中所列组件的顺序可有可无。然而,有一些组件 (Components) 的顺序很是重要,例如图像效果。上下文菜单具备上移 (Move Up) 和下移 (Move Down) 命令,以便你根据须要从新排序组件 (Components)。

image

七、删除组件 (Components)

如要删除一个组件 (Component),在检视器 (Inspector) 中选择或右击其标题,而后选择“删除组件(Remove Component)”。或者左击组件 (Component) 标题旁边的选项图标。

相关文章
相关标签/搜索