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();
    }
示例#3
0
    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);
        }
    }