private bool SpawnVoxelFaces() { // Faces if (!Data) { return(false); } int[,,] voxels = Data.Voxels[CurrentModelIndex]; bool tooLargeAsked = false; int sizeX = voxels.GetLength(0); int sizeY = voxels.GetLength(1); int sizeZ = voxels.GetLength(2); float maxSize = Mathf.Max(sizeX, sizeY, sizeZ, 12); CameraSizeMin = 5f; CameraSizeMax = maxSize * 2f; SetCameraSize((CameraSizeMin + CameraSizeMax) * 0.5f); SetCameraFarClip(maxSize * 4f); SetCameraPosition(new Vector3(0f, 0f, -maxSize * 2f)); ContainerTF.localPosition = -new Vector3(sizeX / 2f, sizeY / 2f, sizeZ / 2f); switch (CurrentEditorMode) { case EditorMode.Rigging: // Quads for (int x = 0; x < sizeX; x++) { Util.ProgressBar("", "Importing...", ((float)x / (sizeX - 1)) * 0.5f + 0.5f); for (int y = 0; y < sizeY; y++) { for (int z = 0; z < sizeZ; z++) { if (voxels[x, y, z] == 0) { continue; } AddQuad(x, y, z, voxels[x, y, z], sizeX, sizeY, sizeZ); if (!tooLargeAsked && ContainerTF.childCount > MAX_QUAD_COUNT) { Util.ClearProgressBar(); bool go = Util.Dialog("", "This model is too large. Still want to edit it ?", "Yes", "Cancel"); tooLargeAsked = true; if (!go) { return(false); } } } } } break; case EditorMode.Sprite: case EditorMode.MapGenerator: case EditorMode.CharacterGenerator: bool allInOne = CurrentEditorMode == EditorMode.CharacterGenerator; // Mesh var result = Core_Voxel.CreateModel(Data, 1f, false, Core_Voxel.LightMapSupportType.SmallTextureButNoLightmap, false, Vector3.one * 0.5f); var vModel = result.VoxelModels != null && result.VoxelModels.Length > 0 ? result.VoxelModels[0] : null; for (int modelIndex = allInOne ? 0 : CurrentModelIndex; modelIndex < (allInOne ? vModel.Meshs.Length : CurrentModelIndex + 1); modelIndex++) { var vMesh = vModel != null && vModel.Meshs != null && vModel.Meshs.Length > modelIndex ? vModel.Meshs[modelIndex] : null; if (vMesh == null) { break; } for (int i = 0; i < vMesh.Count; i++) { var mesh = vMesh.GetMeshAt(i); Texture2D texture; if (IsSpriting) { texture = vModel != null && vModel.Textures != null && vModel.Textures.Length > CurrentModelIndex ? vModel.Textures[CurrentModelIndex] : null; } else { texture = CurrentModelIndex == 0 && vModel != null && vModel.Textures != null && vModel.Textures.Length > 0 ? vModel.Textures[0] : null; } if (!mesh) { break; } FixMeshColorByNormal(mesh); var meshTF = new GameObject("_mesh", typeof(MeshRenderer), typeof(MeshFilter)).transform; meshTF.SetParent(ContainerTF); meshTF.localPosition = new Vector3(sizeX / 2f, sizeY / 2f, sizeZ / 2f); meshTF.localScale = Vector3.one; meshTF.localRotation = Quaternion.identity; meshTF.gameObject.layer = LAYER_ID; var mf = meshTF.GetComponent <MeshFilter>(); mf.mesh = mesh; var mr = meshTF.GetComponent <MeshRenderer>(); var mat = new Material(MESH_SHADER); mat.SetColor(COLOR_SHADER_ID, Color.white); mat.mainTexture = texture ? texture : Texture2D.blackTexture; mr.material = mat; mr.receiveShadows = false; mr.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; } } break; } return(true); }