触发器系统是一个灵活而强大的系统,用于管理游戏中的触发器和事件。它支持多种触发类型、条件和动作,非常适合创建交互式游戏机制。
- 🎯 多种触发类型: 支持即时触发、事件触发和周期触发
- 🔄 条件执行: 灵活的条件系统控制触发器激活
- 📊 概率控制: 内置触发概率控制
- ⏱️ 周期触发: 支持基于时间的周期性触发
- 🔌 事件总线集成: 可选的事件总线系统集成
- 💾 持久化: 支持触发器状态序列化
var trigger_manager = CoreSystem.trigger_manager# 创建事件触发器
var trigger = GameplayTrigger.new({
"trigger_type": GameplayTrigger.TRIGGER_TYPE.ON_EVENT,
"trigger_event": "player_entered",
"conditions": [
{
"type": "state_trigger_condition",
"state_name": "player_in_area",
"required_state": "true"
}
]
})
# 连接触发器信号
trigger.triggered.connect(_on_trigger_activated)
# 激活触发器
trigger.activate()# 创建周期触发器
var periodic_trigger = GameplayTrigger.new({
"trigger_type": GameplayTrigger.TRIGGER_TYPE.PERIODIC,
"period": 2.0, # 每2秒触发一次
"trigger_chance": 0.5 # 50%触发概率
})
periodic_trigger.triggered.connect(_on_periodic_trigger)
periodic_trigger.activate()# 发送事件到触发器系统
trigger_manager.handle_event("player_entered", {
"state_name": "player_in_area",
"state_value": "true"
})查看 trigger_demo 目录获取完整的示例项目。
# 创建区域触发器
var area_trigger = GameplayTrigger.new({
"trigger_type": GameplayTrigger.TRIGGER_TYPE.ON_EVENT,
"trigger_event": "enter_area",
"conditions": [
{
"type": "state_trigger_condition",
"state_name": "player_in_area",
"required_state": "true"
}
]
})
# 处理区域事件
func _on_area_entered(body: Node) -> void:
trigger_manager.handle_event("enter_area", {
"state_name": "player_in_area",
"state_value": "true"
})全局触发器管理器,负责触发器注册和事件处理。
handle_event(trigger_type: StringName, context: Dictionary) -> void: 处理触发事件register_event_trigger(trigger_type: StringName, trigger: GameplayTrigger) -> void: 注册事件触发器register_periodic_trigger(trigger: GameplayTrigger) -> void: 注册周期触发器create_condition(config: Dictionary) -> TriggerCondition: 创建触发条件
核心触发器类,处理触发逻辑和条件。
trigger_type: TRIGGER_TYPE: 触发器类型(IMMEDIATE、ON_EVENT、PERIODIC)conditions: Array[TriggerCondition]: 条件列表persistent: bool: 是否持久化max_triggers: int: 最大触发次数trigger_count: int: 当前触发次数trigger_event: StringName: 事件触发器的事件名称period: float: 周期触发器的触发间隔trigger_chance: float: 触发概率
activate(initial_context: Dictionary = {}) -> void: 激活触发器deactivate() -> void: 停用触发器execute(context: Dictionary) -> void: 执行触发器should_trigger(context: Dictionary) -> bool: 检查是否应该触发reset() -> void: 重置触发器状态
触发条件的基类。
evaluate(context: Dictionary) -> bool: 评估条件
-
选择合适的触发器类型
- 使用 ON_EVENT 处理事件驱动的触发
- 使用 PERIODIC 处理基于时间的触发
- 使用 IMMEDIATE 处理一次性触发
-
管理触发器生命周期
- 在需要时激活触发器
- 在不需要时停用触发器
- 重用时重置触发器
-
有效使用条件
- 保持条件简单明确
- 组合条件实现复杂逻辑
- 使用适当的条件类型
-
性能考虑
- 限制活动触发器数量
- 使用适当的周期更新间隔
- 清理未使用的触发器
-
触发器不触发
- 检查触发器是否已激活
- 验证事件名称是否完全匹配
- 检查条件逻辑
- 确保触发概率合适
-
性能问题
- 活动触发器过多
- 周期更新过于频繁
- 条件评估过于复杂
-
事件集成问题
- 检查事件总线订阅设置
- 验证事件名称和参数
- 检查事件处理器连接