godot-state-machine-advanced by thedivergentai/gd-agentic-skills
npx skills add https://github.com/thedivergentai/gd-agentic-skills --skill godot-state-machine-advanced分层状态、状态栈和上下文传递定义了复杂的行为管理。
用于将物理和输入传播到子状态的高级 HSM 基础委托器。
用于中断状态(暂停/菜单)栈的专业下推自动机。
用于在状态之间传递持久数据的解耦上下文对象模式。
用于防止非法状态变更的专家级转换验证逻辑。
基于状态的移动逻辑,实现逻辑到 AnimationTree 的自动同步。
用于并行状态机(例如,移动 + 攻击)的编排。
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
使用自定义 Godot 资源(.tres)的数据驱动状态定义。
处理从栈中恢复逻辑与全新进入事件。
用于跟踪状态转换历史和栈深度的调试环形缓冲区。
用于有限状态(如眩晕或冲刺)的自动转换组件。
强制要求:在实现分层 AI 行为之前,请阅读 hsm_logic_state.gd。
_physics_process 调用 child.physics_update(),会导致子逻辑孤立。enter() 内部重新进入 transition_to() 调用会导致递归崩溃。如果需要立即进行子转换,请使用 call_deferred。transition_to("Idel") 这样的拼写错误是无声的杀手。使用基于 class_name 的检查或常量。GameManager.player_health 会使它们不可重用。传递一个 Context 对象。push_state 都必须有一个退出计划(pop_state),以避免栈溢出。# hierarchical_state.gd
class_name HierarchicalState
extends Node
signal transitioned(from_state: String, to_state: String)
var current_state: Node
var state_stack: Array[Node] = []
func _ready() -> void:
for child in get_children():
child.state_machine = self
if get_child_count() > 0:
current_state = get_child(0)
current_state.enter()
func transition_to(state_name: String) -> void:
if not has_node(state_name):
return
var new_state := get_node(state_name)
if current_state:
current_state.exit()
transitioned.emit(current_state.name if current_state else "", state_name)
current_state = new_state
current_state.enter()
func push_state(state_name: String) -> void:
if current_state:
state_stack.append(current_state)
current_state.exit()
transition_to(state_name)
func pop_state() -> void:
if state_stack.is_empty():
return
var previous_state := state_stack.pop_back()
transition_to(previous_state.name)
# state.gd
class_name State
extends Node
var state_machine: HierarchicalState
func enter() -> void:
pass
func exit() -> void:
pass
func update(delta: float) -> void:
pass
func physics_update(delta: float) -> void:
pass
func handle_input(event: InputEvent) -> void:
pass
godot-characterbody-2d,godot-animation-player每周安装数
84
仓库
GitHub 星标数
62
首次出现
2026年2月10日
安全审计
安装于
gemini-cli81
codex80
opencode78
kimi-cli76
github-copilot76
amp76
Hierarchical states, state stacks, and context passing define complex behavior management.
Advanced HSM base delegator for propagating physics and input to sub-states.
Professional Pushdown Automata for interruptive state (Pause/Menu) stacking.
Decoupled context object pattern for passing persistent data between states.
Expert transition validation logic to prevent illegal state changes.
Automated Logic-to-AnimationTree syncing with state-based travel logic.
Orchestration for parallel state machines (e.g., Move + Attack).
Data-driven state definition using custom Godot Resources (.tres).
Handling resume-from-stack logic vs fresh entry events.
Debug ring-buffer for tracking state transition history and stack depth.
Auto-transition component for finite states like Stun or Dash.
MANDATORY : Read hsm_logic_state.gd before implementing hierarchical AI behaviors.
child.physics_update() from the parent's _physics_process orphans child logic.transition_to() calls inside enter() cause recursion crashes. Use call_deferred if immediate sub-transitioning is required.transition_to("Idel") are silent killers. Use class_name based checks OR Constants.GameManager.player_health makes them non-reusable. Pass a Context object.push_state MUST have a retirement plan (pop_state) to avoid stack overflow.# hierarchical_state.gd
class_name HierarchicalState
extends Node
signal transitioned(from_state: String, to_state: String)
var current_state: Node
var state_stack: Array[Node] = []
func _ready() -> void:
for child in get_children():
child.state_machine = self
if get_child_count() > 0:
current_state = get_child(0)
current_state.enter()
func transition_to(state_name: String) -> void:
if not has_node(state_name):
return
var new_state := get_node(state_name)
if current_state:
current_state.exit()
transitioned.emit(current_state.name if current_state else "", state_name)
current_state = new_state
current_state.enter()
func push_state(state_name: String) -> void:
if current_state:
state_stack.append(current_state)
current_state.exit()
transition_to(state_name)
func pop_state() -> void:
if state_stack.is_empty():
return
var previous_state := state_stack.pop_back()
transition_to(previous_state.name)
# state.gd
class_name State
extends Node
var state_machine: HierarchicalState
func enter() -> void:
pass
func exit() -> void:
pass
func update(delta: float) -> void:
pass
func physics_update(delta: float) -> void:
pass
func handle_input(event: InputEvent) -> void:
pass
godot-characterbody-2d, godot-animation-playerWeekly Installs
84
Repository
GitHub Stars
62
First Seen
Feb 10, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
gemini-cli81
codex80
opencode78
kimi-cli76
github-copilot76
amp76
Skills CLI 使用指南:AI Agent 技能包管理器安装与管理教程
46,600 周安装