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