Zh/Triggers: Difference between revisions
< Zh
Jump to navigation
Jump to search
(Created page with "{{LanguageBar|Triggers|title=触发器}} {{ACategory|Glossary}} {{ACategory|Level Design}} {{ACategory|Programming}} '''触发器'''是能对其他实体存在作出响应的{{ent|entity}}。地图制作者可以创建触发器{{L|brush}}和触发器{{L|Mesh#Source_2|网格}},而程序员可以将任何对象设为触发器。{{Note|触发器中的<tt>Angles</tt>键值会在游戏中使其旋转。这可能有用,但如果残留未删除也会造成问题。}} ==...") |
m (→地图设计) |
||
Line 8: | Line 8: | ||
[[File:Toolstrigger.gif|right|tools/toolstrigger]] | [[File:Toolstrigger.gif|right|tools/toolstrigger]] | ||
Hammer中可以创建多种类型的{{L|brush entity}}触发器,完整列表见{{ | Hammer中可以创建多种类型的{{L|brush entity}}触发器,完整列表见{{LSpecial|PrefixIndex/trigger}}。最常用的通用触发器包括{{ent|trigger_once}}、{{ent|trigger_multiple}}、{{ent|trigger_look}}和{{ent|trigger_proximity}},它们共享以下属性和输出: | ||
; {{ent|Tool textures|alt=tools/toolstrigger}}:所有触发器实体必须在所有面使用此材质。也可使用{{ent|%CompileTrigger}}创建自定义触发器材质。 | ; {{ent|Tool textures|alt=tools/toolstrigger}}:所有触发器实体必须在所有面使用此材质。也可使用{{ent|%CompileTrigger}}创建自定义触发器材质。 | ||
: {{note|触发器可以使用不含%CompileTrigger的材质(触发器始终为非固体且不可见),但使用%CompileTrigger可避免浪费光照贴图。}} | : {{note|触发器可以使用不含%CompileTrigger的材质(触发器始终为非固体且不可见),但使用%CompileTrigger可避免浪费光照贴图。}} |
Revision as of 03:58, 29 June 2025
触发器是能对其他实体存在作出响应的entity。地图制作者可以创建触发器brush 和触发器网格 ,而程序员可以将任何对象设为触发器。

地图设计
Hammer中可以创建多种类型的brush entity 触发器,完整列表见⧼PrefixIndex/trigger/zh⧽。最常用的通用触发器包括trigger_once、trigger_multiple、trigger_look和trigger_proximity,它们共享以下属性和输出:
- tools/toolstrigger:所有触发器实体必须在所有面使用此材质。也可使用%CompileTrigger创建自定义触发器材质。
注意:触发器可以使用不含%CompileTrigger的材质(触发器始终为非固体且不可见),但使用%CompileTrigger可避免浪费光照贴图。
- 过滤器:可使用Filters 来限制能激活触发器的对象。
- 过滤属性:Hammer Object Properties Dialog#Flags Tab 提供了一系列无需额外实体的简单过滤选项。
OnStartTouch
OnEndTouch
- 当符合过滤条件的实体进入/离开触发器时触发(无论是否通过其他检测)。进入或离开的实体作为!caller传递。
OnStartTouchAll
OnEndTouchAll
- 同上,但仅在无其他(过滤后)实体接触触发器时触发。
OnTouching
OnNotTouching
- 响应
TouchTest
输入触发的输出。所有触发器都支持,但多数FGD 未列出。 OnTrigger
:当实体满足所有触发条件时触发。

OnStartTouch
和OnStartTouchAll。不可重置的触发器激活后会在0.1秒后自毁,在此期间OnStartTouch
仍可能被重复触发。另见
- Brush entity
- Mesh entity
- Inputs and Outputs
- Filters
- Special:PrefixIndex/trigger
- showtriggers_toggle(控制台命令,可使触发器可见)
编程
所有实体都能响应与其他实体的碰撞(参见Touch())。如需无实际碰撞的接触检测,有两种方案:
SetSolid(SOLID_NONE)
与AddSolidFlags(FSOLID_TRIGGER)
- 使实体在物体穿过时接收接触事件
CollisionProp()->UseTriggerBounds(true,iBloatSize)
- 为实体创建超出其bounding box 的"触发器框"(X/Y方向扩展iBloatSize单位,+Z方向扩展iBloatSize/2)。该框与世界坐标对齐且不受实体固体性和碰撞组影响,使用
ent_bbox
命令时显示为浅蓝色方框。 - Valve对所有可拾取物品使用触发器框,扩展尺寸为24(这个数值大得惊人)。
笔刷
要创建使用笔刷模型形状(而非边界框)检测的新触发器,需继承CBaseTrigger并调用InitTrigger()。