Targetname
< Zh
Jump to navigation
Jump to search
Targetname is a
base
Keyvalue available in all
起源 games.
目标名称(或者叫“名称”)顾名思义,即一个实体的名字。名字不是实体存在的必要条件,但通常来讲,实体必须得有一个名字,才能被运用到IO系统中.
注意事项
- 实体也可以通过其类名(比如
prop_dynamic)来成为IO中的被触发实体 - 实体名称并不需要唯一性,它们之间可以共用同一个名字(其输出也会触发到所有同名实体上),多个实体共用的名称会被加粗
- 实体名称不能包含
!或者*字符,具体原因详见下文 - 如果你打算将其他实体绑定到该实体上,则名称中不能包含
,因为这被用于绑定到父实体模型上的附着点
实例
- 实例可以自动给实体名称添加前缀或后缀,以避免重名可能导致的问题。如果未指定前缀名称,则将自动添加
- 前缀与原始实体名称之间使用单个破折号进行分割,例如hall_a3-door_02
- 以
@为起始字符的实体名称(例如@exit_door)不会被添加前缀。即:如果@exit_door和exit_door_relay是前缀为Door_01的实例的一部分,则最终名称为@exit_door和Door_01-exit_door_relay.
玩家事件
在大多数多人游戏中,任何使用以下名称的实体在出现对应事件时,都会收到Use输出
game_playerdie- 每当player死亡时触发,死亡的玩家将作为!activatorgame_playerkill- 每当player杀死另一个玩家时触发,杀手将作为!activator.game_playerjoin- 每当player加入游戏时触发,加入游戏的玩家将作为!activator.game_playerspawn- 每当player出生时触发,出生的玩家将作为!activator.
错误:该事件在

中无效 [todo tested in ?]game_playerleave- 每当player离开游戏时触发,在这种情况下因为玩家实体不存在,所以!activator不会有任何效果
game_playerjoin和game_playerspawn事件?player_spawn,player_death和player_disconnect.匹配名称
在搜索实体时,起源可以使用一些扩展匹配功能,这些功能在各种情况下都很有用,可用于定位未知实体或仅知晓部分名字的实体,并且普遍用于IO系统中,
但它们也可以用于通过实体键值来定位实体,例如filter_activator_name/class的Filter键值,或者实体绑定的父实体,这些扩展匹配功能是:
- 通配符
- 起源一定程度上支持使用
*通配符. 这意味着area1*将匹配任何名字开头为area1的实体,;例如area1_portal或者area1_door,但area2_door则不会被匹配,这种通配符还仅限用于名字末端*,这意味着更复杂的格式(比如*_door或area*_door)没有效果
注意:
Mapbase支持完整的通配符系统,例如*_door、area*_door、ar*a*_d*r和?通配符等,Mapbase还允许在IO系统中使用正则表达式
注意:Hammer无法识别大多数通配符格式,将其视为无效IO,但在实际游戏中可用
IO系统还支持使用实体类名进行匹配,这使用了上面列出的所有相同的扩展匹配功能。起源的其他部分也支持类名匹配,但除非另有说明,否则通常情况并非如此。
关键词
以下特殊目标名称可用于动态选择实体。
!activator关键词,但是玩家实体的SetFogController输出不能使用!activator/!caller关键词,而是使用雾实体的实际名称!activator- 触发整个IO链的起始实体
- 如果玩家走进一个触发器,触发了logic_relay,那么玩家就是Relay的
!activator !self- 触发当前输入链的实体
- 如果玩家走进了一个触发器,导致logic_relay被触发,那么Relay自身就是
!self
特例:
- 如果logic_relay使用
OnTrigger输出触发了env_entity_maker的ForceSpawnAtEntityOrigin输入,并使用!self作为附带参数,那么此处!self便是env_entity_maker
!caller- 触发当前输出链的实体
- 如果玩家走进了一个触发器,导致logic_relay被触发,那么触发器就是Relay输出的
!caller(s)。{{ExpandBox|
- 如果logic_relay使用
OnTrigger输出触发了env_entity_maker的ForceSpawnAtEntityOrigin输入,并使用!caller作为附带参数,那么此处!caller便是Relay - 对于
filter_activator_[xxxx]或者[[zh/Logic_case},TestActivator或者PickRandom/PickRandomShuffle输出,那么此处!caller便是filter_activator_[xxxx]/logic_case自己,而不是触发输出的实体|logic_case},TestActivator或者PickRandom/PickRandomShuffle输出,那么此处!caller便是filter_activator_[xxxx]/logic_case自己,而不是触发输出的实体
]] 特例:
注意:单个输出可以覆盖!caller指定的实体,这是通过point_entity_finder、math_counter、logic_case和过滤器实体实现的!player- 指向玩家
- 在多人游戏中,这指向的是第一个加入服务器的玩家
player进行匹配parentname参数进行实体绑定会在地图启动时导致实体无法绑定 [todo tested in ?]
解决方案:使用logic_auto触发SetParent输入代替!player_blue(仅存在于
之中)- 在传送门2合作模式中,这指向ATLAS(1号玩家)
!player_orange(仅存在于
之中)- 在传送门2合作模式中,这指向P-Body(2号玩家)
!pvsplayer- 在实体的预渲染范围内发现的第一个玩家,所使用的预渲染范围取自进行搜索的实体,如果没有搜索实体,则关键词返回的结果为
!activator,如果!activator也不存在,则关键词返回的结果为!player !picker- 玩家准星下的第一个实体;通常仅用于调试。没有碰撞的实体只能通过瞄准其原点来选择
- 在多人游戏中,这仅对第一个加入游戏的玩家有效
FindNamedEntity关键词
以下关键词仅可用由FindNamedEntity使用,这是一种NPC特有的匹配方法,只能通过特定系统进行搜索(例如场景编排)而不能被IO系统使用
- 待完善: Template:Game link可将其用于IO系统。其他分支也有这种情况吗?
!speechtarget- 由于“看向演员”或“面朝演员事件”,
!caller正在观察的实体 !friend!caller最近的友好NPC,如果NPC没有继承CAI_PlayerAlly类,这将返回玩家作为结果!enemy- 当前
!caller的敌人
关键词注意事项
- 对于特定输入,
!activator和!caller返回的结果可能会有差异,这取决于每个输入的实现方法,这通常不被推荐使用,例如math_counter的GetValue输出 - 当输出指定的触发实体为空时,
!self将不会被设置为!caller返回的结果 - 用于输出覆盖参数的实体名称,由接收输出的实体而不是发送输出的实体评估。
参见
- User Inputs and Outputs
- 关于如何在C++编程中获取实体类名,详见
GetDebugName()