Skip to content
Back to skills

Godot Spawn System

ASecurity

Godot 4 怪物生成系统,包含波次生成、生成点管理、等级驱动配置和掉落机制。

  • 103 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 12, 2026
devopsgonode

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add 925236118/AlphaAgent --skill godot-spawn-system --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Godot Spawn System?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Godot Spawn System
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/925236118-godot-spawn-system/badge)](https://www.skillsdirectory.com/skills/925236118-godot-spawn-system)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: godot-spawn-system
description: Godot 4 怪物生成系统,包含波次生成、生成点管理、等级驱动配置和掉落机制。
---

# Godot 怪物生成系统

## 概述

怪物系统包含怪物生成、寻路 AI、状态机和掉落机制。采用等级驱动的波次生成,根据玩家等级动态调整怪物类型和生成概率。

## 1. 怪物类型

### 1.1 僵尸类型枚举

```gdscript
# 僵尸类型枚举
enum Type {
    Zombie,      # 普通僵尸
    AglieZombie, # 敏捷僵尸
    ZombieKing   # 僵尸王
}
```

### 1.2 怪物属性表

| 类型 | 血量 | 移动速度 | 特殊 |
|------|------|----------|------|
| Zombie | 100 | 100 | 默认类型 |
| AglieZombie | 100 | 150 | 更快的移动速度 |
| ZombieKing | 100 | 100 | 有血条显示,100% 掉落 |

## 2. 生成点系统

### 2.1 地图配置

```gdscript
# 战斗地图类,管理生成点
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
```

### 2.2 场景结构

```
FightMap
├── UpMarkers (Node2D)
│   └── Marker2D × N
├── LeftMarkers (Node2D)
│   └── Marker2D × N
├── RightMarkers (Node2D)
│   └── Marker2D × N
└── DownMarkers (Node2D)
    └── Marker2D × N
```

## 3. 生成波次机制

### 3.1 基于等级的生成配置

```gdscript
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` | 僵尸王生成间隔(秒) |

## 4. 生成逻辑

### 4.1 定时器生成

```gdscript
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)
```

## 5. 僵尸 AI 寻路

### 5.1 导航寻路

```gdscript
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()
```

### 5.2 状态机

```gdscript
enum State {
    Walk,   # 行走
    Stun,   # 眩晕
    Die     # 死亡
}

func die():
    animation_tree_state_machine.travel("Die")
    state_machine.change_state("Die")
    died.emit(type, global_position)
```

## 6. 死亡和掉落系统

### 6.1 掉落率配置

```gdscript
var zombie_drop_bullet_gift = {
    "zombie": 0.05,        # 普通僵尸:5% 掉落
    "aglie_zombie": 0.2,   # 敏捷僵尸:20% 掉落
    "zombie_king": 1       # 僵尸王:100% 掉落
}
```

## 7. 设计模式分析

| 模式 | 应用场景 |
|------|----------|
| **观察者模式** | 僵尸死亡通过 `died` 信号通知 |
| **状态机模式** | 僵尸使用 `StateMachine` 处理状态 |
| **对象池模式** | 通过 `instantiate()` 复用僵尸场景 |
| **导航系统** | 使用 `NavigationAgent2D` 实现自动寻路 |
| **工厂模式** | 根据概率和等级动态选择僵尸类型 |

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.