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
相关产品推荐
相关产品推荐

