指示灯(传送门2)
指示灯是测试室中存在的一排小灯,用于指示地图中两个或多个实体之间的交互,例如按钮和方块投放器。 灯的典型用法是在非活动时为蓝色,在活动时为橙色。
如何制作指示灯
本教程假定您具备Hammer的基础知识。
步骤 1
在您的地图中,创建两个您希望相互交互的实体。这可以是从一个1500MW光圈科学重型超碰撞超级按钮打开一个简单的出口门,到一个将与Diversity Vent临时交互以传递凝胶使玩家更接近解决方案的按钮。无论您决定做什么,都请在被激活的物体旁边放置一个env_texturetoggle实体——这将帮助我们在教程后面更改指示灯颜色,并帮助您记住放置实体的位置,从而使地图更整洁。
步骤 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
步骤 3
在Hammer中选择覆盖层选项,并按要求放置您的灯光覆盖层。在功能上,它们如何放置并不重要,但希望在交互实体之间有一条逻辑线,通常是两个实体之间的最短路径;不要忘记最短路径可能在某些点上沿着墙壁走。此外,为了与Valve处理这些灯光的方法保持一致,当线路转弯时(例如,不包括从墙到地板的过渡),应在拐角处放置一个signage/indicator_lights/indicator_lights_corner_wall,以及在启动器(但不是被激活的物体)的起点处。
一条灯带的长度是四个圆,但有时您可能希望有更少的覆盖层以保持地图整洁。幸运的是,您可以调整覆盖层属性使其更长,而不是复制灯带。这可以通过编辑覆盖层属性窗口中的U 起点或U 终点键值来实现。另一种实现方法是在2D视图中"物理地"拉伸覆盖层——确保取消勾选"纹理锁定"。记住指示灯从不穿过瓷砖之间!
步骤 4
选择您刚刚放置的覆盖层(并且只选择您想要的覆盖层)并将它们全部命名为相同的名称。本教程使用"indlights_1"。然后打开您之前放置的env_texturetoggle,并在目标刷子字段中输入相同的名称。现在将env_texturetoggle命名为"texturetoggle_lights_01"。
步骤 5
选择启动器实体,并转到输出菜单。在本教程中使用了简单的按钮实体,因此表格中的所有输出参数都将与之相关。您需要做的就是向您的启动器添加这两个输出:
My Output > Target Entity Target Input Parameter Delay Only Once 
OnPressed texturetoggle_lights_01 SetTextureIndex 1 0.00 No 
OnButtonReset texturetoggle_lights_01 SetTextureIndex 0 0.00 No
所以基本上,现在当按钮被按下时,texturetoggle_lights_01将更改连接到它的覆盖层为它们的备用"皮肤",即相应的橙色纹理。之后,当按钮重置时,"皮肤"将返回正常的蓝色。
完成!您的指示灯现在应该工作了!
复选框
复选框是一个二进制指示器,意味着它只有关闭和打开两种状态。它用于指示被操作实体的'活动状态'——非活动时是蓝色的'X'标记,活动时是橙色的对勾标记。
步骤 1
使用剪切工具切割表面,以便在指示器面板将要放置的位置有一个32x32单位大小的单个刷子。用tools/toolsnodraw纹理化此刷子。(不可见纹理将被指示器面板覆盖。)
步骤 2
放置一个prop_indicator_panel。旋转它以匹配表面的方向,并将其定位在不可见图瓷砖前方一个单位处。
prop_indicator_panel在Hammer中的外观所欺骗;在游戏中它被绘制为复选框。步骤 3
按要求填写prop_indicator_panel的字段。给实体一个名称,并确保它链接到覆盖层,而不是env_texturetoggle。
Property Name Value Name checkmark_indlights_1 Indicator Lights indlights_1
步骤 4
向启动器实体添加另外两个输出:
My Output > Target Entity Target Input Parameter Delay Only Once 
OnPressed checkmark_indlights_1 Check 0.00 No 
OnButtonReset checkmark_indlights_1 Uncheck 0.00 No
您现在有了一个功能正常的复选框。
复选框计时器
复选框计时器的行为几乎与复选框相同:显示被操作实体的活动状态。然而,它显示操作将持续有限的时间。通常建议启动器是一个简单的基座按钮,因为当激活地板按钮时,玩家期望操作是永久性的,直到他们离开按钮。
在放置计时器之前,请思考您是否*真的*需要它,如果需要,计时器的活动状态将持续多长时间?您不希望任务变得不可能,您只是想给谜题增加一个压力元素。
步骤 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
步骤 3
在您的prop_button上设置以下属性:
Property Name Value Name button_01 Delay Before Reset <保持活动的秒数> Play timer sound Yes
在'Delay Before Reset'字段中设置时间将告诉按钮应该保持按下状态多长时间,并播放计时器声音。将'Prevent fast reset'设置为'No'允许在计时器持续期间的任何给定时间重新按下按钮。这将允许玩家在意识到自己动作太慢时重新启动计时器,而无需等待计时器自行重置。
步骤 4
使此计时器功能正常需要做的最后一件事是向按钮添加一个输出:
My Output > Target Entity Target Input Parameter Delay Only Once 
OnPressed checktime_indlights_1 Start 0.00 No
计时器将在时间到期时自动重置。但是,您仍然可以添加一个'Stop'命令以在其当前值停止计时器,或发送一个'Reset'输出来手动重置它。
老光圈科技指示灯
在纹理浏览器中为灯选择纹理(通过在筛选栏中输入"neon"轻松找到)。
在本教程中,我们将使用"signage/indicator_lights/indicator_neon_straight"
正如您可能已经注意到的,每个灯的默认纹理大小比它应该的要大得多。要简单地修复此问题,请勾选'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,并具有以下属性:
Property Name Value Name <indicator_light_name>_sound Sound Name VFX.OGSignFlicker
确保在标志选项卡中,它不循环,并向您的启动器添加另一个输出: