Unity3d 在unity中,在运行时再次烘焙导航网格会导致导航网格仅部分生成

Unity3d 在unity中,在运行时再次烘焙导航网格会导致导航网格仅部分生成,unity3d,navmesh,Unity3d,Navmesh,我目前正在设计一个统一的迷宫游戏,有一些敌人的AI在迷宫中追逐玩家。如果玩家到达迷宫上的某个瓷砖,它将生成一个尺寸稍大的新迷宫 我一直在使用unity AI NavMeshSurface类来实现这一点,并在生成标高后调用surface.BuildNavMesh()来生成导航网格 每次重新生成关卡时,当前关卡的迷宫游戏对象都会被摧毁: public void GenerateNewMaze(int rows, int columns) { mazeData = dataGe

我目前正在设计一个统一的迷宫游戏,有一些敌人的AI在迷宫中追逐玩家。如果玩家到达迷宫上的某个瓷砖,它将生成一个尺寸稍大的新迷宫

我一直在使用unity AI NavMeshSurface类来实现这一点,并在生成标高后调用
surface.BuildNavMesh()
来生成导航网格

每次重新生成关卡时,当前关卡的迷宫游戏对象都会被摧毁:

public void GenerateNewMaze(int rows, int columns) { mazeData = dataGenerator.FromDimensions(rows, columns); DisplayMaze(); surface.BuildNavMesh(); } public void DisposeOldMaze() { GameObject[] mazeObjects = GameObject.FindGameObjectsWithTag("Generated"); foreach (GameObject mazeObject in mazeObjects) { Destroy(mazeObject); } } 公共void GenerateNewMaze(int行、int列) { mazeData=数据生成器.FromDimensions(行、列); 显示迷宫(); surface.BuildNavMesh(); } 公共无效处置maze() { GameObject[]mazeObjects=GameObject.FindGameObjectsSwithTag(“已生成”); foreach(mazeObject中的游戏对象mazeObject) { 摧毁(mazeObject); } } 我第一次运行它时,它工作得非常好:

然而,从第二次开始,我开始发现一些奇怪的差距:

我想可能在谷歌搜索之后,表面仍然有旧数据,我尝试了两种解决方案,例如
surface.RemoveData()
NavMesh.RemoveAllNavMeshData()
,然后再次构建NavMesh,但我似乎得到了完全相同的结果

目前,我只能考虑在每一代迷宫中创建一个新的NavMeshSurface,但这似乎有些过分,而且没有必要


我遵循的教程是:

结果是我做了一些奇怪的事情。对于那些感兴趣的人来说,我的误解是,在帧结束之前,对我的迷宫对象调用Destroy是不会完成的。所以NavMesh正在为新迷宫和旧迷宫生成

因此,我需要在当前帧中处理当前迷宫对象,并在下面更新NavMesh。我通过调用
FlagLevelForProgression
而不是
GenerateNewMaze
,使用以下代码实现了这一点:

public void FlagLevelForProgression()
{
    mazeConstructor.DisposeOldMaze();

    // Load any stuff we need to...

    canProgressToNextLevel = true;
}

void FixedUpdate()
{
    if(canProgressToNextLevel)
    {
        GenerateNewMaze();
        canProgressToNextLevel = false;
    }
}