Unity : 反転したmeshを作成し、.assetファイルとして保存するエディタ拡張

自分用のメモ

Sphereのメッシュを裏返して天球画像を張り付けたりするなどの時に作成した
( 結果としては使わなくてもよさそう?ってなったが一応残しておく )

適当なオブジェクトに張り付けてMeshFilterを指定し、MakeReverseMeshボタンをクリックすると反転したmeshを生成し、Assets以下の任意のフォルダに保存する

Sphereのメッシュを反転したものがこれ
 

コード

わざわざエディタウィンドウ作るまでもない機能だったのでコンポーネントのインスペクタ拡張で作成

using System.Linq;
using UnityEngine;

#if UNITY_EDITOR
using UnityEditor;
#endif


public class ReverseMeshMaker : MonoBehaviour
{

    [SerializeField] private MeshFilter _meshFilter;

    
    #if UNITY_EDITOR
    
    [CustomEditor(typeof(ReverseMeshMaker))]
    public class ReverseMeshCreatorEditor : Editor
    {


        private void OnEnable()
        {
            var t = target as ReverseMeshMaker;
            t._meshFilter = t.gameObject.GetComponent<MeshFilter>(); 
        }


        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            var t = target as ReverseMeshMaker;

            if (t._meshFilter == null)
            {
                EditorGUILayout.HelpBox("有効なMeshFilterが指定されていません", MessageType.Error);
                return;
            }

            if (GUILayout.Button("Make Reverse Mesh"))
            {
                var reverseMesh = new Mesh();
                reverseMesh.vertices = t._meshFilter.mesh.vertices;
                reverseMesh.triangles = t._meshFilter.mesh.triangles.Reverse().ToArray();
                reverseMesh.RecalculateNormals();

                var path = EditorUtility.SaveFilePanelInProject("ReverseMeshMaker", "reversedMesh", "asset", "裏返したメッシュを作成します");
                AssetDatabase.CreateAsset(reverseMesh, path);
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
            }
        }

    }

    #endif
}

追記

meshを反転させるってことはColliderも反転するので当たり判定が内側になる
これはこれで何かに使えそう

youtu.be