Zh/Entity Hierarchy (parenting): Difference between revisions
No edit summary |
(汉化完成。如有问题欢迎联系,有能力的可以直接修改) |
||
Line 1: | Line 1: | ||
{{otherlang2 | {{otherlang2 | ||
|title=实体层级(绑定关系) | |||
|en=Entity_Hierarchy_(parenting) | |||
|ru=Entity_Hierarchy_(parenting):ru | |ru=Entity_Hierarchy_(parenting):ru | ||
|jp=Entity_Hierarchy_(parenting):jp | |jp=Entity_Hierarchy_(parenting):jp | ||
}} | }} | ||
本简体中文页面由 [[User:GlrWere|Gloria]] | 本简体中文页面由 [[User:GlrWere|Gloria]] 汉化。 | ||
当一组实体“绑定(Parented) | 当一组实体“绑定(Parented)”到一起时,整个层级的实体就能严格一致地运动,表现得如同一个单独的物理对象。每个子实体(child-entity)都会跟随父实体(parent)的运动。 | ||
最简单的例子是,将一个 [[light_dynamic]] 实体绑定到一个实体类型为[[prop_physics|物理实体]] | 最简单的例子是,将一个 [[light_dynamic]] 实体绑定到一个实体类型为[[prop_physics|物理实体]]的台灯模型上,这样光源就像台灯的一部分一样跟随着台灯模型运动。 | ||
绑定关系是在子实体的[[HammerObjectPropertiesDialog|对象属性]]中设定的。父实体则无法控制谁绑定了它。这种形式导致了文档中不得不使用反身动词的形式进行说明,例如“必须被绑定到”“将子实体绑定到父实体”“实体必须有父实体”这类神奇的表述。 | 绑定关系是在子实体的[[HammerObjectPropertiesDialog|对象属性]]中设定的。父实体则无法控制谁绑定了它。这种形式导致了文档中不得不使用反身动词的形式进行说明,例如“必须被绑定到”“将子实体绑定到父实体”“实体必须有父实体”这类神奇的表述。 | ||
*注:“parented”是“parent”的过去分词形式,直译为“以xxx为双亲”。个人建议翻译成“绑定”,符合原意且易于说明和理解。 | *注:“parented”是“parent”的过去分词形式,直译为“以xxx为双亲”。个人建议翻译成“绑定”,符合原意且易于说明和理解。 | ||
只有某些特定实体可以设置父实体属性。例如,[[prop_physics|物理实体]]不可以,因为它自身就是一个物理对象(但任何实体都能作为其它实体的父实体,如果被添加到了'parentname'属性栏中,尽管不都能正常工作)。这种情况下,可以使用 [[prop_dynamic]] 或 [[prop_dynamic_override]] 作为替代,或是使用 [[info_constraint_anchor]] 实体以连接成[[constraint|物理约束系统]]。 | |||
* '''Offset(偏移量)''' 指的是子实体与父实体的距离(包括任意角度的偏移量)。当应用了偏移量属性后,子实体将会平行于父实体运动,并且在父实体旋转时绕着父实体原点“公转”,只有 ''SetParentAttachment'' 事件输入能够''修改''偏移量;它会将子实体立即“传送”并维持在父实体的绑定点上。 | * '''Offset(偏移量)''' 指的是子实体与父实体的距离(包括任意角度的偏移量)。当应用了偏移量属性后,子实体将会平行于父实体运动,并且在父实体旋转时绕着父实体原点“公转”,只有 ''SetParentAttachment'' 事件输入能够''修改''偏移量;它会将子实体立即“传送”并维持在父实体的绑定点上。 | ||
Line 25: | Line 26: | ||
为了在两个实体间创建父子关联,将子实体的 '''parentname属性''' 设置为父实体的'''[[targetname|实体名称]]'''。 | 为了在两个实体间创建父子关联,将子实体的 '''parentname属性''' 设置为父实体的'''[[targetname|实体名称]]'''。 | ||
* 维持偏移量。 {{bug|[[Counter-Strike: Source|反恐精英:起源]] 中部分实体的父实体属性存在异常。取而代之,可以使用 [[logic_auto]] 实体,在地图开始时调用SetParent事件。}}{{bug|在Linux专用服务器上的 [[Half-Life 2: Deathmatch|半条命2:死亡竞赛]]中,子实体有时会丢失绑定。因此,强烈建议使用 [[logic_auto]] 实体,并在输出中添加“<code>OnMapSpawn child SetParent parent</code>”(其中:child 代指子实体名称,parent 代指父实体名称)}} | * 维持偏移量。 {{bug|[[Counter-Strike: Source|反恐精英:起源]] 中部分实体的父实体属性存在异常。取而代之,可以使用 [[logic_auto]] 实体,在地图开始时调用SetParent事件。}}{{bug|在Linux专用服务器上的 [[Half-Life 2: Deathmatch|半条命2:死亡竞赛]]中,子实体有时会丢失绑定。因此,强烈建议使用 [[logic_auto]] 实体,并在输出中添加“<code>OnMapSpawn child SetParent parent</code>”(其中:child 代指子实体名称,parent 代指父实体名称)}} | ||
* 此外,一个 [[attachment|附着点(attachment point)]] | * 此外,一个 [[attachment|附着点(attachment point)]]可以通过 '''parent,attachment''' 的参数形式来进行设定。它的作用就像 '''SetParentAttachmentMaintainOffset''' 一样。 | ||
== SetParent输入事件 == | == SetParent输入事件 == | ||
Line 48: | Line 49: | ||
你还可以在子实体上[[Inputs_and_Outputs|触发]]一个 '''ClearParent输入事件''' 来解除父子实体的绑定。This simply 'unparents' or 'detaches' the child-entity from its current parent, so the child is then free to move (or not) independently of its former parent. | 你还可以在子实体上[[Inputs_and_Outputs|触发]]一个 '''ClearParent输入事件''' 来解除父子实体的绑定。This simply 'unparents' or 'detaches' the child-entity from its current parent, so the child is then free to move (or not) independently of its former parent. | ||
== | == KillHierarchy输入事件 == | ||
{{note| | {{note:zh-cn|这是'''父实体'''唯一与''运动层级''相关的输入事件。}} | ||
如果在父实体[[Inputs_and_Outputs|触发]]一个 '''KillHierarchy输入事件''',会将父实体以及它所有的子实体从世界移除。 | |||
* | * 如果在父实体触发一个 '''Kill 输入事件''',也可以将父实体和它的子实体从世界移除。... ? | ||
{{Bug| | {{Bug|如果将 [[point_spotlight]] 实体作为其它实体的子实体,如果仅使用输入输出事件删除了父实体时,该实体将生成在地图中心点(0,0,0)上,朝向北面。}} | ||
==FollowEntity()== | ==FollowEntity()函数== | ||
程序开发者可以使用 <code>[[FollowEntity()]]</code> 以控制绑定关系。 | |||
[[Category:Level Design]] | [[Category:Level Design]] | ||
== | ==绑定的相关教程(俄文)== | ||
教程由 [https://vk.com/project_source Project-S] 制作。 | |||
[https://www.youtube.com/watch?v=e-78OU52VLw All about Parent (Всё о Parent)] | [https://www.youtube.com/watch?v=e-78OU52VLw All about Parent (Всё о Parent)] |
Revision as of 22:28, 27 May 2018
Template:Otherlang2 本简体中文页面由 Gloria 汉化。
当一组实体“绑定(Parented)”到一起时,整个层级的实体就能严格一致地运动,表现得如同一个单独的物理对象。每个子实体(child-entity)都会跟随父实体(parent)的运动。
最简单的例子是,将一个 light_dynamic 实体绑定到一个实体类型为物理实体的台灯模型上,这样光源就像台灯的一部分一样跟随着台灯模型运动。
绑定关系是在子实体的对象属性中设定的。父实体则无法控制谁绑定了它。这种形式导致了文档中不得不使用反身动词的形式进行说明,例如“必须被绑定到”“将子实体绑定到父实体”“实体必须有父实体”这类神奇的表述。
- 注:“parented”是“parent”的过去分词形式,直译为“以xxx为双亲”。个人建议翻译成“绑定”,符合原意且易于说明和理解。
只有某些特定实体可以设置父实体属性。例如,物理实体不可以,因为它自身就是一个物理对象(但任何实体都能作为其它实体的父实体,如果被添加到了'parentname'属性栏中,尽管不都能正常工作)。这种情况下,可以使用 prop_dynamic 或 prop_dynamic_override 作为替代,或是使用 info_constraint_anchor 实体以连接成物理约束系统。
- Offset(偏移量) 指的是子实体与父实体的距离(包括任意角度的偏移量)。当应用了偏移量属性后,子实体将会平行于父实体运动,并且在父实体旋转时绕着父实体原点“公转”,只有 SetParentAttachment 事件输入能够修改偏移量;它会将子实体立即“传送”并维持在父实体的绑定点上。
- 碰撞箱 :子实体的自身碰撞在绑定后会被忽略。它能够穿过墙或其它的固体对象。
- 当父实体收到 Killed 事件并被移除时,它当前的所有子实体都将被从游戏中移除。
Parentname属性
为了在两个实体间创建父子关联,将子实体的 parentname属性 设置为父实体的实体名称。
- 维持偏移量。
错误:反恐精英:起源 中部分实体的父实体属性存在异常。取而代之,可以使用 logic_auto 实体,在地图开始时调用SetParent事件。 [todo tested in ?]
错误:在Linux专用服务器上的 半条命2:死亡竞赛中,子实体有时会丢失绑定。因此,强烈建议使用 logic_auto 实体,并在输出中添加“
OnMapSpawn child SetParent parent
”(其中:child 代指子实体名称,parent 代指父实体名称) [todo tested in ?] - 此外,一个 附着点(attachment point)可以通过 parent,attachment 的参数形式来进行设定。它的作用就像 SetParentAttachmentMaintainOffset 一样。
SetParent输入事件
你可以在子实体上触发一个 SetParent输入事件来更改绑定关联。
- 将 targetname 设置成新的父实体,作为 SetParent 的输入参数,来把子实体绑定到新的父实体上。
- 如果参数一栏为空,则它的效果与 ClearParent 输出事件相同(见下方)。
- 能够保持偏移量。
SetParentAttachment输入事件
Template:Note:zh-cn 你还可以在子实体上触发一个 SetParentAttachment输入事件,将它绑定到父实体的某个特定的附着点上。参数为附着点的名称。
- 子实体会立即“传送”到附着点的位置。这是唯一一种无法保持偏移量的方法。
SetParentAttachmentMaintainOffset输入事件
Template:Note:zh-cn 你还可以在子实体上触发一个 SetParentAttachmentMaintainOffset输入事件 将它绑定到父实体的某个特定的附着点上。这部分的作用与 SetParentAttachment输入事件 完全一致,区别在于这个方法将会保持子实体绑定到父实体时的偏移量不变。
- 能够保持偏移量不变,但子实体将会跟随附着点运动、旋转而不是父实体的实体原点。
ClearParent输入事件
你还可以在子实体上触发一个 ClearParent输入事件 来解除父子实体的绑定。This simply 'unparents' or 'detaches' the child-entity from its current parent, so the child is then free to move (or not) independently of its former parent.
KillHierarchy输入事件
Template:Note:zh-cn 如果在父实体触发一个 KillHierarchy输入事件,会将父实体以及它所有的子实体从世界移除。
- 如果在父实体触发一个 Kill 输入事件,也可以将父实体和它的子实体从世界移除。... ?

FollowEntity()函数
程序开发者可以使用 FollowEntity()
以控制绑定关系。
绑定的相关教程(俄文)
教程由 Project-S 制作。