You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot 4塔防游戏敌人生成器问题求助

敌人生成器问题解决方案
  • 修正生成逻辑顺序:当前代码先将敌人生成到旧的SpawnLocation位置,再更新SpawnLocation,导致首次生成用初始位置、后续才随机。调整为先获取随机生成点,再生成敌人:

    extends Node3D
    
    var enemy = preload("res://enemieshit/enemiepathfollow.tscn")
    var rng = RandomNumberGenerator.new()
    
    func _ready():
        rng.randomize() # 初始化随机数,避免每次启动随机序列重复
    
    func _on_spawn_timer_timeout():
        # 获取随机生成点
        var spawn_nodes = get_tree().get_nodes_in_group("spawn")
        if spawn_nodes.empty():
            print("警告:未找到spawn组内的节点")
            return
        var random_spawn = spawn_nodes[rng.randi() % spawn_nodes.size()]
        
        # 生成敌人并设置位置
        var enemy_instance = enemy.instantiate()
        add_child(enemy_instance)
        # 若敌人场景根是Path3D(包含PathFollow3D和角色体)
        enemy_instance.position = random_spawn.position
        # 让PathFollow3D从路径起点开始(假设节点名为PathFollow3D)
        if enemy_instance.has_node("PathFollow3D"):
            enemy_instance.get_node("PathFollow3D").offset = 0.0
    
  • 检查敌人场景结构:确保立方体角色体是PathFollow3D的直接子节点,这样PathFollow3D沿Path3D移动时,角色体才会同步跟随。同时确认Path3D的路径已正确设置为敌人行走路线。

  • Timer节点验证:检查Timer的wait_time(生成间隔)、autostart(自动启动)属性是否符合需求,且timeout信号已正确连接到_on_spawn_timer_timeout函数。

  • 坐标适配:若SpawnLocation或Marker3D是其他节点的子节点,position为局部坐标,需用global_position替代以确保生成位置正确:

    enemy_instance.global_position = random_spawn.global_position
    

内容的提问来源于stack exchange,提问作者Tiago Costa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:46:01