依赖代理与事件注册¶
GFNodeState 与纯代码 GFState 保持同一套架构代理。状态可以在进入、退出或事件处理中读取 Model、System、Utility,也可以发送命令、查询和事件。
可用代理¶
get_model()get_system()get_utility()send_command()send_query()send_event()send_simple_event()register_event()register_assignable_event()register_simple_event()unregister_owner_events()
这些代理会优先解析最近的 GFNodeContext,再回退全局 Gf 架构。
状态内监听¶
监听只在状态激活期间有效时,应在 _exit() 中调用 unregister_owner_events()。
class_name AttackState
extends GFNodeState
var _combat_model: CombatModel
func _enter(_previous_state: StringName = &"", _args: Dictionary = {}) -> void:
_combat_model = get_model(CombatModel) as CombatModel
register_event(AnimFinishedPayload, _on_anim_finished)
func _exit(_next_state: StringName = &"", _args: Dictionary = {}) -> void:
unregister_owner_events()
func _on_anim_finished(payload: AnimFinishedPayload) -> void:
if payload.animation_name == &"attack":
transition_to(&"Idle")
使用边界¶
状态脚本可以借助代理访问架构,但不应在状态之间共享临时监听所有权。跨状态长期监听更适合放在宿主 Controller、System 或明确的长期模块中。