/// <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 GetMeshIsNotNull()
 {
     Setup();
     foreach (var model in models)
     {
         var mesh = RendererUtility.GetMesh(model.renderer);
         Assert.IsNotNull(mesh);
     }
 }
 public void GetMeshTriangleCountIsCorrect()
 {
     Setup();
     foreach (var model in models)
     {
         var mesh          = RendererUtility.GetMesh(model.renderer);
         var triangleCount = RendererUtility.GetMeshTriangleCount(mesh);
         Assert.AreEqual(triangleCount, model.rendererMeshTriangleCount);
     }
 }
 public void GetMeshPathIsCorrect()
 {
     Setup();
     foreach (var model in models)
     {
         var mesh = RendererUtility.GetMesh(model.renderer);
         var path = RendererUtility.GetMeshPath(mesh);
         Assert.AreEqual(path, model.modelDataPath);
     }
 }
        /// <summary>
        /// Rendererから必要な情報を取得
        /// </summary>
        /// <param name="renderer"></param>
        /// <param name="mesh"></param>
        private void LoadRendererData(Renderer renderer)
        {
            var mesh = RendererUtility.GetMesh(renderer);

            if (mesh == null)
            {
                return;
            }
            triangleCount    = RendererUtility.GetMeshTriangleCount(mesh);
            saveFolder       = RendererUtility.GetMeshPath(mesh);
            defaultMaterials = RendererUtility.GetMaterials(renderer);
            matInfos         = RendererUtility.GetMaterialInfos(renderer);
            textureNames     = matInfos.Select(x => x.Name).ToArray();
            meshName         = StringUtility.AddKeywordToEnd(mesh.name, MESH_SUFFIX);
        }
        public bool SetUVMapTexture(Renderer renderer, MaterialInfo materialInfo)
        {
            if (renderer == null || materialInfo == null)
            {
                editMat.SetTexture("_UVMap", null);
                return(true);
            }

            var mesh = RendererUtility.GetMesh(renderer);

            if (mesh == null)
            {
                return(false);
            }

            uvMapTexture = GenerateUVMap(mesh, materialInfo);
            editMat.SetTexture("_UVMap", uvMapTexture);
            return(true);
        }