こんにちは、SAT-BOXのコアラです
Unityで動的にメッシュを作成したときに、MeshFilterにはこう表示されますよね
ちなみに処理はこんな感じ
using UnityEngine; public class ExportMesh : MonoBehaviour { void Start() { // 適当なメッシュを作成 var mesh = new Mesh(); mesh.vertices = new Vector3[] { new Vector3(0.7f,0,0), new Vector3(-0.7f,0,0), new Vector3(0,1,0) }; mesh.triangles = new int[] { 0, 1, 2 }; GetComponent<MeshFilter>().sharedMesh = mesh; } }
当然ですが、ファイルとして存在しているわけではないので名前がありません
この状態で実行を止めればメッシュも消えますよね
今回は、このように作成したファイルを書き出してみようと思います
さっきの処理にInspector拡張の処理を付け加えました
using UnityEngine; #if UNITY_EDITOR using UnityEditor; #endif public class ExportMesh : MonoBehaviour { void Start() { // 適当なメッシュを作成 var mesh = new Mesh(); mesh.vertices = new Vector3[] { new Vector3(0.7f,0,0), new Vector3(-0.7f,0,0), new Vector3(0,1,0) }; mesh.triangles = new int[] { 0, 1, 2 }; GetComponent<MeshFilter>().sharedMesh = mesh; } } #if UNITY_EDITOR [CustomEditor(typeof(ExportMesh))] public class ExportMeshEditor : Editor { public override void OnInspectorGUI() { if (GUILayout.Button("Export")) { AssetDatabase.CreateAsset(((ExportMesh)target) .gameObject.GetComponent<MeshFilter>().sharedMesh, "Assets/mesh.asset"); } } } #endif
AssetDatabase.CreateAssetという関数で、色々なObjectをAssetファイルとして書き出せます
このように記述すれば…
Exportボタンが出現して、押したらMeshFilterのほうにもファイル名が表示されました
勿論Assetフォルダにファイルとして書き出されてます
ただのInspector拡張なので、実行中じゃなくても使えます
何かに役立ててもらえればと思います