/// <summary> /// メッシュを削除する /// </summary> /// <param name="renderer"></param> /// <param name="deleteTexPos"></param> /// <param name="texture"></param> /// <param name="subMeshIndexInDeletedVertex"></param> private bool DeleteMesh(Renderer renderer, bool[] deletePos, MaterialInfo matInfo) { var texture = matInfo.Texture; var materialIndexList = matInfo.MaterialSlotIndices; var mesh = RendererUtility.GetMesh(renderer); var materials = renderer.sharedMaterials.ToArray(); var textureSize = new Vector2Int(texture.width, texture.height); var(deletedMesh, hadDeletedSubMeshes) = MeshDeleter.RemoveTriangles(mesh, deletePos, textureSize, materialIndexList); if (meshName == "") { meshName = mesh.name + MESH_SUFFIX; } AssetDatabase.CreateAsset(deletedMesh, AssetDatabase.GenerateUniqueAssetPath(Path.Combine(saveFolder, $"{meshName}.asset"))); AssetDatabase.SaveAssets(); Undo.RecordObject(renderer, "Change mesh " + deletedMesh.name); previousMesh = mesh; previousMaterials = renderer.sharedMaterials; RendererUtility.SetMesh(renderer, deletedMesh); if (hadDeletedSubMeshes.Any(deletedSubMesh => deletedSubMesh == true)) { // サブメッシュ削除によってマテリアルの対応を変更する必要がある renderer.sharedMaterials = materials.Where((material, index) => !hadDeletedSubMeshes[index]).ToArray(); return(true); } return(false); }
public void RevertMeshToPreviously(CanvasView canvasView) { ResetMaterialsToDefault(renderer); RendererUtility.SetMesh(renderer, previousMesh); previousMesh = null; renderer.sharedMaterials = previousMaterials; previousMaterials = null; Initialize(canvasView, false); }
public void SetMeshIsCorrect() { var mesh = new Mesh { name = "mesh2", vertices = new Vector3[] { new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 0, 0) }, triangles = new int[] { 0, 1, 2 } }; Setup(); foreach (var model in models) { RendererUtility.SetMesh(model.renderer, mesh); Assert.AreEqual(model.renderer.sharedMesh, mesh); } }