这篇条目有关 Source引擎。如需详情,点击这里。

func_instance_io_proxy

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)中文 (zh)Translate (Translate)

func_instance_io_proxy是一个逻辑实体,可在所有的 起源 起源 游戏,自从 异形丛生 异形丛生 以来中使用。

实体描述

用于在实例(en)实体I/O(en)之间转发消息。

在实例内放置此实体的副本。通过代理的OnProxyRelay输出向实例内实体发送消息,使您能够从实例外部触发这些实体。从实例内实体向代理发送ProxyRelay消息,即可通过func_instance将这些事件用于向外部其他实体发送消息。

Note.png注意:实例、代理及所有相关实体应使用描述性命名。
Note.png注意:此实体非内部实体,编译后将保留。
Icon-Bug.png错误:
  • 通过ProxyRelay向代理发送输出的实体只能输出到代理。若实体既有输出到代理又有输出到实例内其他实体,代理会将正常输出重定向到ProxyRelay#,导致I/O系统出现异常行为。
  • 必须显式设置修正名称(Fix Up Name)。若实例的修正名称留空,则消息转发将失效,且实例内实体甚至不会在ent_fire命令的自动补全中显示(即使实例应自动生成名称时也如此)。
  • 若实例嵌套在另一个实例中,则通过代理向实例发送消息将失效。可通过基于已知修正名称直接命名实体来规避此问题(而非使用代理转发)。  [todo tested in ?]
Warning.png混淆的风险:This is a point entity despite the name starting with func_ (which is usually used for brush entities).

键值

名称 (targetname) <target_source>
其他实体引用此实体时使用的名称。

输入

ProxyRelay <字符串(en)>
此消息将被转发,并可从实例访问。

输出

OnProxyRelay
外部消息可触发此输出以在实例内引发事件。
Note.png注意:引擎中不存在ProxyRelayOnProxyRelay。它们仅作为VBSP的占位符,编译时会自动映射到OnProxyRelay1OnProxyRelay30

使用指南

创建输出

func_io_proxy的核心价值在于映射实例内实体的输出,使其成为func_instance实体自身的可配置输出。若无此功能,与外部世界的任何交互都需精心预设计划,极大限制实例的功能性。

要路由输出,需在源实体中向代理发送含ProxyRelay输入的输出:

detect_stuff_trigger - trigger_multiple
我的输出 > 目标实体 目标输入 参数 延迟 仅一次
Io11.png OnStartTouch door_proxy ProxyRelay   0.00
 

func_instance实体现在能像使用自身输出一样使用此输出。

Note.png注意:因当前代理限制,实体向代理发送输出后将无法再向实例内其他实体发送输出。可通过添加额外实体处理相同输入和功能来规避:原始实体仅指向代理,新增实体仅处理实例内输出。

在func_instance的输出选项卡点击"添加",即可配置如下输出:

func_instance
我的输出 > 目标实体 目标输入 参数 延迟 仅一次
Io11.png instance:detect_stuff_trigger;OnStartTouch zap_sound playsound   0.00
Io11.png instance:detect_stuff_trigger;OnStartTouch !activator kill   2.00
 

理论上可向代理添加任意数量实体的任意数量输出。这使func_instance成为通配实体:借预设实体的输出,供地图制作者自由配置。

处理输入

实例代理可预定义重要输入,用于提示地图制作者实例的标准用法,或隔离外部可操作范围以避免逻辑错误。

要添加预定义输入,在代理的输出选项卡使用OnProxyRelay输出指向实例内实体的输入:

shaft_proxy - func_instance_io_proxy
我的输出 > 目标实体 目标输入 参数 延迟 仅一次
Io11.png OnProxyRelay detect_stuff_trigger disable   0.00
 

代理配置输入后,外部实体即可通过func_instance调用:

elevator_arriving_relay - logic_relay
我的输出 > 目标实体 目标输入 参数 延迟 仅一次
Io11.png elevator_shaft_instance instance:detect_stuff_trigger;Disable   0.00
 

您会注意到: 1. 无需填写目标输入字段 2. Hammer可能不标记此连接有效(可忽略,因Hammer不总是校验此类连接)

建议仅预定义实例的标准功能输入。非常规操作可直接通过实体实名向实例内实体发送消息(如elevator_shaft-detect_stuff_test)。此方法适用于:

  • 不常复用的操作
  • 需直接/非常规控制的行为
  • 因过于基础或频繁而不值得配置代理的调用

另见