在 Manus 中运行任何 Skill
一键导入
一键导入
一键在 Manus 中运行任何 Skill
开始使用godot-spawn-system
星标97
分支14
更新时间2026年4月23日 10:35
Godot 4 怪物生成系统,包含波次生成、生成点管理、等级驱动配置和掉落机制。
安装
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
SKILL.md
readonly菜单
Godot 4 怪物生成系统,包含波次生成、生成点管理、等级驱动配置和掉落机制。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Godot 4.x .tscn 场景文件纯文本格式规范与 AI 操作指南 — 文件结构、资源引用、 Transform 变换、属性值格式、信号连接,以及 AI 直接读写 .tscn 文件的操作方法。
Godot 4.x .tscn 场景文件纯文本格式规范与 AI 操作指南 — 文件结构、资源引用、 Transform 变换、属性值格式、信号连接,以及 AI 直接读写 .tscn 文件的操作方法。
Godot 4 Autoload单例模式最佳实践,包含全局管理、事件总线、信号通信。
Godot 4 Buff系统完整实现,支持状态效果管理、持续时间、循环效果、层叠机制等。使用Resource+Component架构。
Godot 4 建造系统实现,包含GridMap方块管理、第一人称视角、射线交互。
Godot 4 ECS实体组件系统模式,包含组件化设计、数据与逻辑分离、组件通信。
| name | godot-spawn-system |
| description | Godot 4 怪物生成系统,包含波次生成、生成点管理、等级驱动配置和掉落机制。 |
怪物系统包含怪物生成、寻路 AI、状态机和掉落机制。采用等级驱动的波次生成,根据玩家等级动态调整怪物类型和生成概率。
# 僵尸类型枚举
enum Type {
Zombie, # 普通僵尸
AglieZombie, # 敏捷僵尸
ZombieKing # 僵尸王
}
| 类型 | 血量 | 移动速度 | 特殊 |
|---|---|---|---|
| Zombie | 100 | 100 | 默认类型 |
| AglieZombie | 100 | 150 | 更快的移动速度 |
| ZombieKing | 100 | 100 | 有血条显示,100% 掉落 |
# 战斗地图类,管理生成点
class_name FightMap
extends Node2D
@export_group("Zombie Generater Enable")
@export var up_enable: bool = false
@export var left_enable: bool = false
@export var right_enable: bool = false
@export var down_enable: bool = false
@export_group("Zombie Generater Markers")
@export var up_markers_container: Node2D
@export var left_markers_container: Node2D
@export var right_markers_container: Node2D
@export var down_markers_container: Node2D
func get_zombie_generater_markers() -> Array[Marker2D]:
var result: Array[Marker2D] = []
if up_enable:
result.append_array(up_markers_container.get_children())
if left_enable:
result.append_array(left_markers_container.get_children())
if right_enable:
result.append_array(right_markers_container.get_children())
if down_enable:
result.append_array(down_markers_container.get_children())
return result
FightMap
├── UpMarkers (Node2D)
│ └── Marker2D × N
├── LeftMarkers (Node2D)
│ └── Marker2D × N
├── RightMarkers (Node2D)
│ └── Marker2D × N
└── DownMarkers (Node2D)
└── Marker2D × N
var generate_zombie_with_level = [
{"zombie": 0.75, "king": 0.5, "king_time": 16},
{"zombie": 0.30, "king": 1, "king_time": 5}, # 25级:僵尸王必出
]
| 字段 | 说明 |
|---|---|
zombie | 普通僵尸生成概率(1 - zombie = 敏捷僵尸概率) |
king | 僵尸王生成概率权重 |
king_time | 僵尸王生成间隔(秒) |
func _on_generate_zombie_timer_timeout():
if not zombie_generate_enable:
return
var zombie_markers = current_fight_map.get_zombie_generater_markers()
var rand_zombie: float = randf()
if can_generate_zombie_king and rand_zombie < GameData.generate_zombie_with_level[GameData.level].king:
can_generate_zombie_king = false
generate_zombie_king_timer.wait_time = GameData.generate_zombie_with_level[GameData.level].king_time
generate_zombie_king_timer.start()
zombie_packed_scene = ZOMBIE_KING
fight_ui.warn_zombie_king()
else:
rand_zombie = randf()
if rand_zombie < GameData.generate_zombie_with_level[GameData.level].zombie:
zombie_packed_scene = ZOMBIE
else:
zombie_packed_scene = AGILE_ZOMBIE
var zombie: Zombie = zombie_packed_scene.instantiate()
zombie.global_position = zombie_markers.pick_random().global_position + random_pos
zombie.died.connect(on_zombie_died)
enermies.add_child(zombie)
func _physics_process(_delta):
if not is_died and not is_stun:
var player := get_tree().get_first_node_in_group("Player") as Player
navigation_agent_2d.target_position = player.global_position
var next_pos = navigation_agent_2d.get_next_path_position()
var new_velocity = global_position.direction_to(next_pos) * SPEED
navigation_agent_2d.set_velocity(new_velocity)
await navigation_agent_2d.velocity_computed
move_and_slide()
enum State {
Walk, # 行走
Stun, # 眩晕
Die # 死亡
}
func die():
animation_tree_state_machine.travel("Die")
state_machine.change_state("Die")
died.emit(type, global_position)
var zombie_drop_bullet_gift = {
"zombie": 0.05, # 普通僵尸:5% 掉落
"aglie_zombie": 0.2, # 敏捷僵尸:20% 掉落
"zombie_king": 1 # 僵尸王:100% 掉落
}
| 模式 | 应用场景 |
|---|---|
| 观察者模式 | 僵尸死亡通过 died 信号通知 |
| 状态机模式 | 僵尸使用 StateMachine 处理状态 |
| 对象池模式 | 通过 instantiate() 复用僵尸场景 |
| 导航系统 | 使用 NavigationAgent2D 实现自动寻路 |
| 工厂模式 | 根据概率和等级动态选择僵尸类型 |