直立开关

From Valve Developer Community
< Zh
Revision as of 07:15, 4 October 2025 by Qp0001 (talk | contribs) (你当然可以旋转它......所以你挂在天上是想自研跳板吗。)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
English (en)Français (fr)中文 (zh)Translate (Translate)
传送门关卡设计

本教程将展示如何创建在Portal中后期出现的开关。这个开关是专门给玩家使用的,可以永久按下,也可以在一段时间后弹回。

制作

1.底座笔刷

底座笔刷

创建一个使用 <nodraw>纹理, <64宽*64长*8高> 的笔刷。为其侧面使用<signage/hazard_orange_03b>纹理,顶部则是<concrete/concrete_modular_floor001a>纹理。

2.开关模型

你要的模型

放一个 <prop_dynamic> 实体并将其 World Model 设为 <models/props/switch001.mdl>,并起名 (更改Name) 为<switch1>。

Note.png注意:你当然可以使用你想要的名称,例如 S_01 ,只要你认得出来就行

3.开关声音

放一个 <ambient_generic(en)> 实体,起名为 <button1_down>,将其 Sound Name 设为 <Portal.button_down>, 再将 Source Entity Name 设为 <switch1>。 放另一个 <ambient_generic(en)> 并起名为 <button1_up>, 它的 Sound Name 为 <Portal.button_up>, Source Entity Name 为 <switch1>.

4.计时器

设置计时器

创建一个 <logic_timer(en)> 实体,起名为 <timer_ticktock1>。进入属性,将其 Start Disabled设为<Yes> 并将其 Refire Interval 设为 <1>。接下来,创建一个<ambient_generic>实体并起名为<sound_ticktock1>,将其 Sound Name 设为 <Portal.room1_TickTock>,将其Max Audible Distance 设为<441> 并将其 Source Entity Name 设为 <switch1>(你的按钮模型)。 现在,将以下输出添加到<timer_ticktock1>:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTimer sound_ticktock1 PlaySound   0.00 No

5.使按钮可用

在开关模型上方32个单位处创建一个 <16宽*16长*16高> 的笔刷。 其纹理应该是 <tools/toolsplayerclip(en)> 并将其绑定为 <func_door_rotating(en)> 实体。 将其Speed 设为 <500>, 将 Distance 设为 <0>。

并将 Delay before reset 设为它应保持按下的时间,设为 <-1> 即可永远保持按下。 下一步,前往flags选项卡检查Use OpensDoor Silent 框框。 接下来,将以下输出添加到door实体:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnOpen switch1 SetAnimation down 0.00 No
Io11.png OnFullyOpen button1_down PlaySound   0.00 No
Io11.png OnFullyOpen timer_ticktock1 Enable   0.00 No
Io11.png OnClose switch1 SetAnimation up 0.00 No
Io11.png OnFullyClosed button1_up PlaySound   0.00 No
Io11.png OnFullyClosed timer_ticktock1 Disable   0.00 No


开关已经准备就绪,应该可以在地图中正常使用。

结果

第一步

把它放在你需要的位置,你当然可以旋转它。

第二步

添加开关激活时应触发的输出。

按下开关时应触发的输出为 <func_door_rotating> 实体的 OnFullyOpen,以及开关在其计时器走完后的 OnFullyClosed 输出。