public static void LoadMeshes_andInstantinateRooms(SaveAndLoadAssetWithMenu dates) { string transformsStr; DeserializeTransform transforms; MeshFilter instaniatedObj; Mesh mesh = (Mesh)AssetDatabase.LoadAssetAtPath($"{dates.PathToAssetBundle}/{dates.LevelName}/0.asset", typeof(Mesh)); for (int i = 0; mesh != null; i++) { if (i != 0) { mesh = AssetDatabase.LoadAssetAtPath <Mesh>($"{dates.PathToAssetBundle}/{dates.LevelName}/{i}.asset"); } if (mesh != null) { transformsStr = NodeCreator.ReadFile(dates.PathToAssetBundle, dates.LevelName, $"{i}.txt"); transforms = JsonConvert.DeserializeObject <DeserializeTransform>(transformsStr); instaniatedObj = Instantiate((MeshFilter)dates.wallPrefab, transforms.P, Quaternion.Euler(transforms.R), (Transform)dates.wallContainer); instaniatedObj.transform.localScale = transforms.S; instaniatedObj.mesh = mesh; instaniatedObj.gameObject.name = i.ToString(); instaniatedObj.gameObject.GetComponent <MeshCollider>().sharedMesh = mesh; } } }
static void OpenMenu() { SaveAndLoadAssetWithMenu contextMenu = (SaveAndLoadAssetWithMenu)GetWindow(typeof(SaveAndLoadAssetWithMenu)); contextMenu.Show(); }
private void BuildingRooms(RoomCreator manager) { #region удаляем и создаем новый контейнер if (manager.WallContainer != null) { while (manager.WallContainer.childCount > 0) { DestroyImmediate(manager.WallContainer.GetChild(0).gameObject); } DestroyImmediate(manager.WallContainer.gameObject); } manager.WallContainer = Instantiate(manager.PrefabNodeContainer, new Vector3(0, 0, 0), Quaternion.identity); #endregion for (int i = 0; i < manager.LinkNodes.Count; i++) { for (int j = 0; j < manager.LinkNodes[i].toNode.Count; j++) { Transform wall = Instantiate(manager.WallPrefab, (manager.LinkNodes[i].NodePosition + manager.LinkNodes[i].toNode[j] + new Vector3(0, manager.Height, 0)) / 2, Quaternion.identity, manager.WallContainer); manager.ConverterMesh.GetPolygonTree(wall.gameObject); keys = manager.ConverterMesh.GetKeys(); if (manager.BuildWithMeshEditing == RoomCreator.statesBuilds.WithMeshEdit) { InstantinateWallWithEditMesh(manager, wall, manager.LinkNodes[i].toNode[j], manager.LinkNodes[i].NodePosition); } else if (manager.BuildWithMeshEditing == RoomCreator.statesBuilds.WithoutMeshEdit) { wall.LookAt(manager.LinkNodes[i].NodePosition + new Vector3(0, manager.Height / 2, 0)); wall.localScale = new Vector3(manager.Width, manager.Height, Vector3.Distance(manager.LinkNodes[i].NodePosition, manager.LinkNodes[i].toNode[j]) + manager.Width); } else if (manager.BuildWithMeshEditing == RoomCreator.statesBuilds.Combination) { int axiesChanges = 0; Vector3 vector = manager.LinkNodes[i].NodePosition - manager.LinkNodes[i].toNode[j]; if (Mathf.Abs(vector.x) > 0) { axiesChanges++; } if (Mathf.Abs(vector.y) > 0) { axiesChanges++; } if (Mathf.Abs(vector.z) > 0) { axiesChanges++; } if (axiesChanges > 1) { InstantinateWallWithEditMesh(manager, wall, manager.LinkNodes[i].toNode[j], manager.LinkNodes[i].NodePosition); } else { wall.LookAt(manager.LinkNodes[i].NodePosition + new Vector3(0, manager.Height / 2, 0)); wall.localScale = new Vector3(manager.Width, manager.Height, Vector3.Distance(manager.LinkNodes[i].NodePosition, manager.LinkNodes[i].toNode[j]) + manager.Width); } } } } if (manager.BuildWithMeshEditing != RoomCreator.statesBuilds.WithoutMeshEdit) { SaveAndLoadAssetWithMenu.DownloadMeshes_andSaveRooms(manager); } }