Godot - 如何让我的块以 3 x 3 的网格围绕玩家生成

问题描述

如何在 3 x 3 网格中生成块,以便场景中始终有 9 个网格实例?目前,每次玩家移动到新区域/区块时,我只会生成 1 个区块。

为了让你们更容易,我把它放到了一个 github repo 中,以便你们可以下载并试用它! https://github.com/Dragon20C/GODOT---Flat-Terrain-Generation

相关代码

    var chunk_x = floor(player.translation.x / chunk.size)
    var chunk_z = floor(player.translation.z / chunk.size)
    var new_chunk_pos = Vector2(chunk_x,chunk_z)
    
    if new_chunk_pos != chunk_pos:
        if !new_chunk_pos in prevIoUs_chunks:
            chunk_pos = new_chunk_pos
            var instance = chunk_scene.instance()
            add_child(instance)
            instance.chunk_position_set(Vector3(chunk_pos.x * chunk.size,chunk_pos.y * chunk.size))
            prevIoUs_chunks.append(chunk_pos)

解决方法

将此代码提取到一个新函数中:

        if !new_chunk_pos in previous_chunks:
            chunk_pos = new_chunk_pos
            var instance = chunk_scene.instance()
            add_child(instance)
            instance.chunk_position_set(Vector3(chunk_pos.x * chunk.size,chunk_pos.y * chunk.size))
            previous_chunks.append(chunk_pos)

然后调用它传递 new_chunk_pos 和它周围块的位置。即 x 在 new_chunk_pos.x - 1new_chunk_pos.x + 1 范围内,y 在 new_chunk_pos.y - 1new_chunk_pos.y + 1 范围内的位置。