制作翻转面板

From Valve Developer Community
< Zh
Revision as of 13:16, 1 October 2025 by Qp0001 (talk | contribs) (非常不努力的写了)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
English (en)Русский (ru)中文 (zh)Translate (Translate)

翻转面板是一个在社区地图中发扬光大的物件,通常用来挑战极限、开发大脑或提示玩家来早了/需要借助其它部分的终点奖励来用上这面墙。


方案A: Func_door_rotating

1. 用Hammer block.png Block Tool画一个你需要大小的面板。别让它太薄,因为这可能会让传送门像极限运动员在生死簿上的名字一样闪烁。8 个单位的厚度是可行的。

2. 把它绑定成实体func_door_rotating。在这个教程中,我们给它起名 "flip_panel"。

3. 根据你的需要,调整数值:

条目名称 内容或指数 解释
name flip_panel 后续发送的输入需要这玩意儿有个名字
Speed 380 旋转速度,照你想要的来。Puzzle Maker(游戏内编辑器)翻转面板使用380。
Start Sound a3_jump_intro_rotating_panel_travel_01.wav 添加启动时的音效,如果你真的需要(不需要其它实体来播放)
Stop Sound a3_jump_intro_rotating_panel_arrival_01.wav 添加结束时的音效,同上(同上)
Delay Before Reset (-1 stay) -1 面板旋转后的倒计时,它会在结束时自己转回去。设为-1即可固定在翻转后。
Spawn Position Closed 这可以设置为 打开(Open) 或 关闭(Closed) 。选哪一个并不重要,但后面的输入取决于你在这里使用的内容。在本教程中,请将其保留为 关闭(Closed) 。
Distance 180 这是面板旋转的数。我们想要一个彻底翻脸(从前到后)的面板,所以我们填 180 度。


4. 找到正确的轴来旋转。

我们将笔刷设置为旋转 180 度,但我们没有指定它应该以哪为中心旋转,因此它实际上会像门一样翻转到旁边。最简单的方法是func_door_rotating中描述的方法.。


==设置原点==

旋转点可以通过改变实体原点来改变。原点设置对象将在运动平面上旋转的哪个点,将其视为门的铰链。在 Hammer 中启用 show helpers 选项后,原点将在实体中心显示为一个白色小圆圈,可以将其拖动到新位置。

首先要做的是找到我们希望画笔旋转的轴。一个好方法是查看网格视图并找到显示我们要放置原点的准确位置的视图。找到后,将光标拖动到视口的左上角以显示它是哪个视口,

1.此视图仅显示三个轴中的两个,缺少的轴是我们想要的轴,在本例中为 Y 轴。转到实体门的flags部分,然后选中Y Axis。要记住的另一件事是,默认情况下,一个func_door_rotating在 2D 视图中围绕旋转点顺时针移动,而我们希望它向另一个方向移动,因此我们还需要在对象的flags中选中Reverse Dir。现在将光标移动到门的原点 2 上。

Door rotate 2.jpg

5. 添加输入以使这个面板翻转。例如,你可以使用prop_floor_button

My Output Target Entity Target Input
OnPressed flip_panel Open
OnUnPressed flip_panel Close

视频预览


方案B: Func_Brush作为旋转模型的父级

在hammer中查看

1. 创建一个prop_dynamic实体并输入下列数值:

Property Name Value
Name trans_panel
Pitch Yaw Roll (X Y Z) 90 0 0
World Model models/anim_wp/simple_panel_transforms/simple_panel.mdl

2. 创建您想要的任何尺寸的块笔刷(推荐 64x16x64)并将其与模型对齐。使用以下设置将其绑定到func_brush

Property Name Value
Name trans_brush
Parent trans_panel,panel_attach
Note.png注意:唇笔Hammer将提示父级(Parent)值无效。忽略它。

3. 创建一个ambient_generic实体并输入下列数值:

Property Name Value
Name trans_sound_end
Sound name World.SpeedFlingRotatingPanelStop
Volume 2


4. 回到prop_dynamic实体并添加下列输出:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnAnimationDone trans_sound_end PlaySound 0.00 No


5. 创建一个prop_button实体并添加下列输出:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnPressed trans_panel SetAnimation rotate_180 0.00 No
Io11.png OnUnPressed trans_panel SetAnimation rotate_180_reverse 0.00 No

这将使面板与笔刷一起旋转。第二行用来在延迟后将面板旋转回正常位置。

你还可以将旋转面板连接到任何其他类型的输入。将输出设置为以下内容(其实就是去掉输出原换成你想要的):

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png <your output> trans_panel SetAnimation rotate_180 0.00 No
Io11.png <your output> trans_panel SetAnimation rotate_180_reverse 0.00 No

原文由LemonLake清理和美化

“你说得对,但Qp0001是一款智能扫地机器人,能听懂一国外语”

下载 panels_rotate Prefab

比较

虽然一开始在方案A中设置func_door_rotating听起来很复杂,但这种方法的优点是它节省了两个ambient_generics、一个prop_dynamic以及大量用于父级和轮换的输入。

然而,这种方法相较方案B有一个缺点:simple_panel旋转动画具有过度旋转然后弹回原位的“生动”效果,而func_door_rotating将在旋转后停止。

参见