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も反転するので当たり判定が内側になる
これはこれで何かに使えそう