void LoadBakedData() { if (_bakeDataFileName.Length > 0 && File.Exists(_bakeDataFileName)) { string bakedDataJson = File.ReadAllText(_bakeDataFileName); NavGridBakeDataModel navGridBakeData = JsonUtility.FromJson <NavGridBakeDataModel>(bakedDataJson); _navUnitSize = navGridBakeData.NavUnitSize; navGridSizeX = navGridBakeData.NavGridSizeX; navGridSizeY = navGridBakeData.NavGridSizeY; navGridSizeZ = navGridBakeData.NavGridSizeZ; ResetNavUnits(); int l = 0; for (int j = 0; j < navGridSizeY; j++) { for (int k = 0; k < navGridSizeZ; k++) { for (int i = 0; i < navGridSizeX; i++) { _navUnits[l] = _navUnits[l].UpdateFromBakedData(this, navGridBakeData.NavUnits[l]); l++; } } } } }
void BakeNavGrid() { ResetNavUnits(); int l = 0; for (int j = 0; j < navGridSizeY; j++) { for (int k = 0; k < navGridSizeZ; k++) { for (int i = 0; i < navGridSizeX; i++) { _navUnits[l] = _navUnits[l].Update(this); l++; } } } SceneView.RepaintAll(); NavGridBakeDataModel navGridBakeData = new NavGridBakeDataModel { NavUnitSize = _navUnitSize, NavGridSizeX = navGridSizeX, NavGridSizeY = navGridSizeY, NavGridSizeZ = navGridSizeZ, NavUnits = new NavUnitBakeDataModel[navGridSizeX * navGridSizeY * navGridSizeZ] }; l = 0; for (int j = 0; j < navGridSizeY; j++) { for (int k = 0; k < navGridSizeZ; k++) { for (int i = 0; i < navGridSizeX; i++) { navGridBakeData.NavUnits[l] = new NavUnitBakeDataModel { IsNavigable = _navUnits[l].IsNavigable() ? 1 : 0 }; l++; } } } string bakeDataDir = SceneManager.GetActiveScene().path; bakeDataDir = bakeDataDir.Substring(0, bakeDataDir.Length - Path.GetFileName(bakeDataDir).Length) + "NavGridData/"; Directory.CreateDirectory(bakeDataDir); _bakeDataFileName = bakeDataDir + "navGridBakedData"; File.WriteAllText(_bakeDataFileName, JsonUtility.ToJson(navGridBakeData)); AssetDatabase.Refresh(); }