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

可用的梯子

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)Deutsch (de)Español (es)한국어 (ko)Polski (pl)Русский (ru)中文 (zh)Translate (Translate)
关卡设计

注:本文行文方式较原文有所改变,欢迎改进仍然存在的不足

  除了少数例外,在大多数用起源 起源引擎制作的游戏中,一个完整的梯子实际上由两部分构成:

  1. 一个由道具(en)(如prop_static)或固体(en)构成的可见梯子模型(可见部分);
  2. 特定的点实体(en)固体实体(en)固体(en)攀爬部分)。

  如此而言,玩家爬的不是看得到的梯子模型,而是真正提供攀爬功能的不可见实体(en)固体(en)


  若要创建可见部分,你可以选择:

  • 一个应用梯子模型(例如models/props_c17/metalladder001.mdl)的prop_static实体。
  • 一个具有梯子纹理(例如metal/metalladder001a)的固体(en)

  关于创建攀爬部分,由于起源 起源游戏间有不同的需求,梯子攀爬部分的创建和攀爬方式主要被划分为2种。

(下文分游戏讲述攀爬部分的创建方法以及梯子的优化。)

点实体梯子

创建梯子

适用于: Half-Life 2 series Half-Life 2 series(半衰期2系列), SiN Episodes SiN Episodes, Dark Messiah of Might and Magic Dark Messiah of Might and Magic

  这种梯子的攀爬部分类似线段,需要你确定两点作为梯子的起止点。可以使用的有func_useableladder(en)点实体。(还可以用一个可能在较古早地图中碰见的func_ladderendpoint(en)点实体。)

  func_useableladder实体(在实体编辑面板中)被分为两个子实体:起点与止点(见 Fig. 1a)。有两种方法改变这两点的位置。

  1. 当梯子实体(func_useableladder(en))被选中时,在2D视图(2D View)中可看到其中心点,拖动其中的一个中心点来把TA放到一个合适的位置(见 Fig. 1b)。梯子的起止点位置(理论上)没有限制(可见 Fig. 1c)。
  2. 在实体编辑面板中修改两点坐标;

  在游戏中,玩家攀爬的轨迹为两点构成的线段。

Fig. 1a - 示例:梯子的起止点
Fig. 1b - 改变中心点(图中空心圆点)
Fig. 1c - 斜向梯子示例

  放置好起止点后,确保它们不与可视部分接触,因为这会使梯子的部分区域不可攀爬。

落脚点

Fig. 2 - 粉的便是落脚点

  你可以创建一个落脚点(英文版中的Dismount)(见 Fig. 2)来使玩家更轻松且可控地下梯。使用名为info_ladder_dismount的点实体创建落脚点。 在靠近梯子起止位置的旁边创建一个落脚点的实体,玩家便可在起止点及周围按使用键(默认为“E”)从梯上下到落脚点(通常当梯子在两个以上的楼层之间运行时)。若玩家到达了梯子的起止点,他也可以面朝落脚点走下梯子。 可以使用多个info_ladder_dismount点实体设置多个落脚点。

  为避免相近梯子的不同落脚点间的混乱,每个info_ladder_dismount点实体(落脚点)都有一个LadderName属性,可以用来设置该落脚点所属的梯子的名称(Name)。

  类似于梯子,落脚点不得有障碍物且玩家按使用键到达下梯时不得与世界带碰撞多边形相触

游戏内测试

  弄好梯子后,你就可以编译地图并在游戏中测试它们了。可以在游戏内打开控制台输入sv_showladders 1来显示梯子实体与调试信息, 然后打开或重加载(控制台输入restart)你欲要调试的地图。随后便将显示梯子的起止点(func_useableladder 实体)与落脚点(info_ladder_dismount 实体; 见 Fig. 3a)。这帮助你查究这些梯子实体是否与世界几何体即固体或道具模型(如与prop_static(en)挤在一起。(见 Fig. 3b).

Fig. 3a - 游戏内视角
Fig. 3b - func_usableladder的终止点卡在墙里

游戏中梯子如何运作

  爬上梯子最安全(应该叫最好?)的方法是靠近梯子,随后按下使用键。这会自动把你吸到梯子上。 (或者用方向键直接走上去,但伴有更大风险,比如从梯子上掉下来或掉进洞里(话说真有这么危险吗))。

  从梯上下来,你可以:1.跳跃;2.按使用键。
  如果梯子拥有info_ladder_dismount实体的话,你也可以直接从结束处走下,并且在靠近并面对info_ladder_dismount时按下使用键也可以让你在梯子的任何地方更可控地下梯子。

固体型梯子

func_ladder作梯子

Fig. 4 - 在prop_static点实体前方并使用tools/toolsinvisibleladder纹理的func_ladder固体实体(en)
梯子落脚点的示例,梯子顶端距离地板有56个单位长。

适用于: 求生之路系列求生之路系列 求生之路系列, 反恐精英:起源 反恐精英:起源, 胜利之日:起源 胜利之日:起源, Garry's Mod Garry's Mod, Vampire: The Masquerade – Bloodlines Vampire: The Masquerade – Bloodlines, The Ship: Murder Party The Ship: Murder Party, 黑山 黑山, 半衰期:起源 半衰期:起源, Jabroni Brawl: Episode 3 Jabroni Brawl: Episode 3

  在可视部分前创建固体,尽可能靠近的同时注意保留空隙。调整固体宽高直到二者之间宽高相同。给前文中创建的固体应用纹理tools/toolsinvisibleladder,再将其转为固体实体(快捷键Ctrl+T)。在物体属性对话框中选择func_ladder并确认。做完这些,梯子就可以用来爬了。

  这种梯子是可以左右滑动的,按下对应方向的移动键就可以了。速度较快,不便于新手掌控。
  梯子攀爬部分的高度应当距离下方落脚地面至少56个单位左右,同时攀爬部分不能与其上方的天花板接触。
  若攀爬部分即func_ladder实体没有足够的高度,向上攀爬时会滑落下来而不是登至上方落脚处。入机的IQ并不高,爬梯却常爬很高。如果梯子实体距离上方的障碍物太近,会让入机们爬梯时卡在梯子顶端。

Tip.png提示: 如果在游戏内地图加载的时候,观察到开发者控制台(en)因未知实体info_ladder而报错,使用下文csgo中创建梯子的方法作为替代来防止切割可视区域(en).
Icon-Important.png重要: 在梯子实体和任何细节实体(detail brush)间预留至少1单位的空隙来防止固体面被吃掉。但在求生之路系列(en)里,游戏会保留它作为一个独立实体,所以并不算大问题。
Note.png注意:
  • func_ladder固体实体可使用任何纹理,VBSP会自动给予func_ladder以梯子成分。任何已渲染的面在游戏中仍然可见。 (例如Vampire: The Masquerade – Bloodlines中梯子实体使用tools/toolsinvisible纹理。)
  • 多个相互交接的梯子会被转为单个梯子。如果要对一个梯子阻塞导航路点(block navigation),操作会在2个梯子上同时生效。在梯子间保留缝隙。
  • 求生之路系列求生之路系列 求生之路系列中,感染者梯子(en)使用纹理tools/climb_versus。想要制作对幸存者和感染者阵营都可使用的梯子,参见下面非func_ladder作梯子的方法。也可以去看看如何在L4D中制作梯子(en)的文章。
Icon-Bug.png错误:若梯子穿过水面,与之相互作用的玩家可能展现出奇怪的反应——水中的玩家被传送至梯子的末端。这种现象曾在梯子固体不完全淹没时出现。
待完善: 在什么条件下它可以精准复现?

非func_ladder作梯子

prop_static前应用tools/toolsinvisibleladder纹理的func_detail实体。
适用于: 基建危机 基建危机, 反恐精英:全球攻势 反恐精英:全球攻势
也可用于: 反恐精英:起源 反恐精英:起源, 胜利之日:起源 胜利之日:起源, Garry's Mod Garry's Mod, 半衰期:起源 半衰期:起源

  这种梯子的放置方式与运作原理与固体实体型梯子完全一致,但是作为攀爬部分的固体不应该被转为func_ladder固体实体,否则在游戏中它会不存在。 要创建这种梯子,创建一个固体在你欲要使其可攀爬的物体/固体前,尽量靠近但不要接触。

  把可见部分正面的宽高调整到与攀爬部分的相同,将纹理tools/toolsinvisibleladder应用给作为攀爬部分的固体。 然后没有了——你搞完了。

Icon-Important.png重要:
  • 因为应用tools/toolsinvisibleladder的固体也会分割可视区域(en), 所以确保将攀爬部分转为func_detail或其他的固体实体。
  • 在作为攀爬部分的固体与其他固体间预留至少一个单位的空隙来防止其他固体的某个纹理面被吃掉。
Tip.png提示:
  • 任何添加有%CompileLadder参数的固体纹理都可供攀爬。
  • toolsinvisibleladder纹理和任何其他的%CompileLadder材质都会让整个固体发挥梯子的效用,甚至在只有一面为该纹理的情况下也是如此。固体的其他面将仍然展示ta原有的纹理。
  • 若固体仅有一面可供攀爬,那么带有$surfaceprop参数的梯子材质是一个替代的选择(测试于反恐精英:起源),可能不适用于所有游戏。某些游戏同时也有一个提供不同攀爬音效的带同参数的木梯材质)。
  • 在可供使用非func_ladder作梯子的游戏中,带碰撞体积的模型在使用$contents "ladder"QC命令(en)后可以像梯子般供作攀爬。

以固体为基础的变相创建梯子的方法

一列使用toolsclip纹理的固体,在无正经梯子实体的情况下发挥梯子效用。

在这些游戏中使用 军团要塞2 军团要塞2, 传送门2 传送门2

  某些起源引擎的游戏不支持搞正常的梯子,燃鹅,创建极倾斜的楼梯是一种实现梯子的替代方案。

创建可视部分:
  首先,创建一个prop_static实体并将类似于models/props_c17/metalladder002.mdl的世界模型应用给该实体。 你也可以创建一个梯子道具(ladder prop)或一个应用了梯子纹理的固体。
  下一步,创建一个高16个单位且应用碰撞纹理(en)的固体。以该固体作为单个阶梯,不断复制,并以1个单位为横向距离调整各阶梯位置,最终构成的结构实际上将被游戏视为可供玩家攀爬的楼梯。为防止玩家到达底部时ta们走出太远,选择未应用碰撞纹理的固体,将它们编为一组,压缩它们直到最高一阶穿出道具(the prop)终止的位置,而每个方块的小边缘仍会正常工作。(这句我看不太懂,原句:To keep them from going too far out once you reach the bottom select the no clip blocks group them and then compress them as long as the top step sticks out past where the prop ends and each block still has a small lip it will work just fine. )至此则大功告成——你得到了一个好看,可爬的梯子。

  该种方法的视频参考: TF2地图制作:TF2中的梯子(需要梯子,嗯对)

Icon-Important.png重要: 这种方式创建的梯子本质是楼梯,所以只能模拟向上爬,而不能模拟向下爬。如果需要缓冲,请在梯子底部放置水。

由VScript驱动的替代方案

 仅在军团要塞2 军团要塞2中使用: 使用VScript(en)的,一个重现func_ladder(en)移动方式的方案。

  首先,下载该script (右键后点击 (将链接)另存为), 把TA放进你的tf/scripts/vscripts/目录内。然后创建一个func_brush(en)作为func_ladder(en)实体的替代,并在实体的键值Entity Scripts一栏填写func_ladder.
  大功告成。

证实:可能在半衰期2:死亡竞赛里也管用,可应对点实体梯子不合适的情况(如一个横向的梯子)。

梯子优化/完善

  作为可视部分的梯子道具,如每个prop_static实体,默认使用VPhysics(en)作为碰撞体积。这会提供更细致的物理碰撞,但在某些情况下或许不太合适。在供多人游戏的和优化要求高的地图里,使用VPhysics的道具会花费宝贵的资源,而你可能会想去牺牲更好的物理效果来避免滞后/卡顿。以下是些减小花销的妙点子:

  • 若梯子使用于半衰期2 半衰期2半衰期2:死亡竞赛 半衰期2:死亡竞赛这2款游戏中,而且梯子还是直的,最好的选择取决于你是否打算让玩家透过梯子射击。如否(如梯子贴墙而立),那么Collisions的键值应改为"Use Bounding Box"(使用界限盒)。如是,那么键值可改为"Not Solid"(无碰撞体积)并放置一个应用碰撞纹理(en)(如tools/toolsclip)的固体来提供碰撞体积。
  • 若梯子使用于上面的同款游戏中,但梯子是斜的,使用界限盒("Use Bounding Box")不仅不会使之和梯子道具同时旋转,而且还会阻碍攀爬系统的正常工作,在这种情况下一个更好的选择是将梯子道具的键值Collisions更改为Not Solid,并沿梯子放置一个经过旋转且应用纹理toolsclip或toolsplayerclip的固体。做为选择,如果不用实体prop_static的话,你可以关闭SmartEdit(智能编辑)并将道具的键值solid更改为3,这会让ta使用一个正确旋转过的界限盒。
  • 若梯子使用于反恐精英:起源 反恐精英:起源胜利之日:起源 胜利之日:起源中,你可将梯子道具的键值Collisions更改为"Not Solid"并让func_ladder固体覆盖梯子道具,若有必要则适当旋转。

  在多人游戏地图中,区别于直线的单向挪动,在梯子的表面上自由滑动是制图者所期望的另一种爬梯方式。固体作为外观的梯子,可以将供攀爬的梯子固体转为无碰撞的func_brush来防止玩家“粘”上梯子的一面,而用道具作为外观的梯子,它们常常沿墙面伸出过多距离让玩家觉得可以站在其中。那样的话,你最好创建2个应用toolsplayerclip纹理的楔形固体来引导玩家面向梯子正面。
  如果没别的需要,把非func_ladder的一般固体作的梯子转为func_detail可以削减多余的可见区域。

亦可参阅