Zh/Triggers: Difference between revisions
< Zh
Jump to navigation
Jump to search
m (→地图设计) |
m (→地图设计) |
||
Line 12: | Line 12: | ||
: {{note|触发器可以使用不含%CompileTrigger的材质(触发器始终为非固体且不可见),但使用%CompileTrigger可避免浪费光照贴图。}} | : {{note|触发器可以使用不含%CompileTrigger的材质(触发器始终为非固体且不可见),但使用%CompileTrigger可避免浪费光照贴图。}} | ||
; 过滤器:可使用{{L|Filters}}来限制能激活触发器的对象。 | ; 过滤器:可使用{{L|Filters}}来限制能激活触发器的对象。 | ||
; 过滤属性:{{L|Hammer Object Properties Dialog#Flags | ; 过滤属性:{{L|Hammer Object Properties Dialog#属性(Flags)选项卡|属性(Flags)选项卡}}提供了一系列无需额外实体的简单过滤选项。 | ||
; <code>OnStartTouch</code> | ; <code>OnStartTouch</code> | ||
; <code>OnEndTouch</code> | ; <code>OnEndTouch</code> |
Revision as of 04:01, 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 来限制能激活触发器的对象。
- 过滤属性:属性(Flags)选项卡 提供了一系列无需额外实体的简单过滤选项。
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()。