指示灯(传送门2)

From Valve Developer Community
< Zh
Revision as of 01:33, 9 November 2025 by WoShiGeNiCheng (talk | contribs) (Created page with "{{LanguageBar|Indicator Lights (Portal 2)|title=指示灯(传送门2)}} right|170px '''指示灯'''是测试室中存在的一排小灯,用于指示地图中两个或多个实体之间的交互,例如按钮和方块投放器。 灯的典型用法是在非活动时为蓝色,在活动时为橙色。 == 如何制作指示灯 == 300px|thumb|right|铺设好的指示灯 本教程假定您具备{{L|Hammer}}...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
English (en)Русский (ru)中文 (zh)Translate (Translate)
Indiclights 1.png

指示灯是测试室中存在的一排小灯,用于指示地图中两个或多个实体之间的交互,例如按钮和方块投放器。 灯的典型用法是在非活动时为蓝色,在活动时为橙色。

如何制作指示灯

铺设好的指示灯

本教程假定您具备Hammer(en)的基础知识。

步骤 1

在您的地图中,创建两个您希望相互交互的实体。这可以是从一个1500MW光圈科学重型超碰撞超级按钮(en)打开一个简单的出口(en),到一个将与Diversity Vent(en)临时交互以传递凝胶(en)使玩家更接近解决方案的按钮(en)。无论您决定做什么,都请在被激活的物体旁边放置一个env_texturetoggle(en)实体——这将帮助我们在教程后面更改指示灯颜色,并帮助您记住放置实体的位置,从而使地图更整洁。

步骤 2

在纹理浏览器中为灯选择纹理,本教程使用"signage/indicator_lights/indicator_lights_floor"(通过在筛选栏中输入"indicator"轻松找到)。

A1. signage/indicator_lights/indicator_lights_floor
A2. signage/indicator_lights/indicator_lights_wall
B1. signage/indicator_lights/indicator_lights_corner_wall
B2. signage/indicator_lights/indicator_lights_corner_floor

Note.png注意:每对覆盖层中的纹理在功能上无法区分,但在外观上,地板上的光线在您走出一段距离后看起来更廉价。

步骤 3

在Hammer中选择覆盖层(en)选项,并按要求放置您的灯光覆盖层。在功能上,它们如何放置并不重要,但希望在交互实体之间有一条逻辑线,通常是两个实体之间的最短路径;不要忘记最短路径可能在某些点上沿着墙壁走。此外,为了与Valve处理这些灯光的方法保持一致,当线路转弯时(例如,不包括从墙到地板的过渡),应在拐角处放置一个signage/indicator_lights/indicator_lights_corner_wall,以及在启动器(但不是被激活的物体)的起点处。

一条灯带的长度是四个圆,但有时您可能希望有更少的覆盖层以保持地图整洁。幸运的是,您可以调整覆盖层属性使其更长,而不是复制灯带。这可以通过编辑覆盖层属性窗口中的U 起点U 终点键值来实现。另一种实现方法是在2D视图中"物理地"拉伸覆盖层——确保取消勾选"纹理锁定"。记住指示灯从不穿过瓷砖之间!

Tip.png提示:记住您可以向灯带长度添加小数值。例如,如果您想要一条5个圆的灯带,这是有用的,如果您将灯带长度设置为1.25(每个圆是0.25),这是可能的。所以如果您想要一条11个圆的灯带,灯带长度将是2.75。
Tip.png提示:如果您将2D网格设置为16,您将永远不必担心有分数圆,因为纹理有16*16个圆。这只有在您要么在关闭"纹理锁定"的情况下调整纹理,要么使用小数值(例如3个点的长度为0.75)时才有效。

步骤 4

选择您刚刚放置的覆盖层(并且只选择您想要的覆盖层)并将它们全部命名为相同的名称。本教程使用"indlights_1"。然后打开您之前放置的env_texturetoggle,并在目标刷子字段中输入相同的名称。现在将env_texturetoggle命名为"texturetoggle_lights_01"。

步骤 5

选择启动器实体,并转到输出菜单。在本教程中使用了简单的按钮实体,因此表格中的所有输出参数都将与之相关。您需要做的就是向您的启动器添加这两个输出:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnPressed texturetoggle_lights_01 SetTextureIndex 1 0.00 No
Io11.png OnButtonReset texturetoggle_lights_01 SetTextureIndex 0 0.00 No

所以基本上,现在当按钮被按下时,texturetoggle_lights_01将更改连接到它的覆盖层为它们的备用"皮肤",即相应的橙色纹理。之后,当按钮重置时,"皮肤"将返回正常的蓝色。

完成!您的指示灯现在应该工作了!

复选框

如何放置prop_indicator_panel

复选框是一个二进制指示器,意味着它只有关闭和打开两种状态。它用于指示被操作实体的'活动状态'——非活动时是蓝色的'X'标记,活动时是橙色的对勾标记。

Tip.png提示:复选框通常仅用于出口门,或者当某个物品有多个输入时。

步骤 1

使用剪切工具切割表面,以便在指示器面板将要放置的位置有一个32x32单位大小的单个刷子。用tools/toolsnodraw纹理化此刷子。(不可见纹理将被指示器面板覆盖。)

步骤 2

放置一个prop_indicator_panel。旋转它以匹配表面的方向,并将其定位在不可见图瓷砖前方一个单位处。

Note.png注意:不要被prop_indicator_panel在Hammer中的外观所欺骗;在游戏中它被绘制为复选框。
Tip.png提示:TeamSpen's Hammer Addons(en)包含此实体的自定义Hammer模型,准确表示游戏中的位置和外观。

步骤 3

按要求填写prop_indicator_panel的字段。给实体一个名称,并确保它链接到覆盖层,而不是env_texturetoggle。

Property Name Value
Name checkmark_indlights_1
Indicator Lights indlights_1
Note.png注意:如果您决定填写prop_indicator_panel属性中的'Indicator Lights'字段,prop_indicator_panel将充当env_texturetoggle。所以当它被"选中"或"取消选中"时,它将相应地更改您附加到它的指示灯路径的"皮肤"。不再需要texturetoggle,可以将其移除。

步骤 4

向启动器实体添加另外两个输出:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnPressed checkmark_indlights_1 Check   0.00 No
Io11.png OnButtonReset checkmark_indlights_1 Uncheck   0.00 No

您现在有了一个功能正常的复选框。

复选框计时器

复选框计时器的行为几乎与复选框相同:显示被操作实体的活动状态。然而,它显示操作将持续有限的时间。通常建议启动器是一个简单的基座按钮(en),因为当激活地板按钮(en)时,玩家期望操作是永久性的,直到他们离开按钮。

在放置计时器之前,请思考您是否*真的*需要它,如果需要,计时器的活动状态将持续多长时间?您不希望任务变得不可能,您只是想给谜题增加一个压力元素。

步骤 1

使用剪切工具切割表面,以便在指示器面板将要放置的位置有一个32x32单位大小的单个刷子。用tools/toolsnodraw纹理化此刷子。(不可见纹理将被指示器面板覆盖。)

步骤 2

放置一个prop_indicator_panel。旋转它以匹配表面的方向,并将其定位在不可见图瓷砖前方一个单位处。设置以下键值:

Property Name Value
Name checktime_indlights_1
Timer Duration <倒计时的秒数>
Is a timer Yes
Is checked No
Indicator Lights indlights_1
Note.png注意:"Is checked"设置面板是否将以对勾开始。因为您想要一个计时器,请确保此字段设置为'No'。

步骤 3

在您的prop_button上设置以下属性:

Property Name Value
Name button_01
Delay Before Reset <保持活动的秒数>
Play timer sound Yes

在'Delay Before Reset'字段中设置时间将告诉按钮应该保持按下状态多长时间,并播放计时器声音。将'Prevent fast reset'设置为'No'允许在计时器持续期间的任何给定时间重新按下按钮。这将允许玩家在意识到自己动作太慢时重新启动计时器,而无需等待计时器自行重置。

Tip.png提示:使用'Delay Before Reset'字段来防止在连接的实体仍在工作时再次按下按钮也很有用。例如,在传递方块(en)时,您不希望玩家在投放器完全关闭之前就能够销毁它。

步骤 4

使此计时器功能正常需要做的最后一件事是向按钮添加一个输出:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnPressed checktime_indlights_1 Start   0.00 No

计时器将在时间到期时自动重置。但是,您仍然可以添加一个'Stop'命令以在其当前值停止计时器,或发送一个'Reset'输出来手动重置它。

Indiclights neon 1.png

老光圈科技指示灯

在纹理浏览器中为灯选择纹理(通过在筛选栏中输入"neon"轻松找到)。
在本教程中,我们将使用"signage/indicator_lights/indicator_neon_straight"

Note.png注意:旧光圈科技(en)指示灯覆盖层通常是一个64x64的纹理,带有单个霓虹灯条纹。

正如您可能已经注意到的,每个灯的默认纹理大小比它应该的要大得多。要简单地修复此问题,请勾选'Texture Lock'键,并在其中一个2D视图中缩小覆盖层,直到它成为一个16x16的单灯纹理。现在回到步骤 2完成指示灯线和触发器。

老光圈科技复选框

创建一个32宽x2长x32高的方块刷子,使用tools/toolsnodraw纹理化。在前面放置一个signage/indicator_lights/indicator_neon_check覆盖层,并用plastic/plasticwall004a_dirty纹理化侧面。确保您的'Texture Lock'键被勾选,并缩小覆盖层以适应刷子。移动此刷子使其与您的指示灯对齐。

将刷子绑定到func_brush实体,并赋予它与您的info_overlay实体相同的名称。

现在一切应该正常工作了。

收尾工作

要添加霓虹灯点亮闪烁声音,只需在您的复选框上放置一个ambient_generic(en),并具有以下属性:

Property Name Value
Name <indicator_light_name>_sound
Sound Name VFX.OGSignFlicker

确保在标志选项卡中,它不循环,并向您的启动器添加另一个输出:

My Output > Target Entity Target Input Parameter Delay Only Once
Io11.png OnPressed <indicator_light_name>_sound PlaySound 0.00 No