うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Mesh Filter の Mesh を保存する

Mesh Fileter の コンテキストメニューで「Save Mesh」を押すと保存先を指定し、Mesh を保存できる

f:id:hacchi_man:20200408222120p:plain

例えば Cube の Mesh を保存するとちゃんと保存できている

f:id:hacchi_man:20200408222806p:plain

コード

public static class MeshUtil
{
    [MenuItem("CONTEXT/MeshFilter/Save Mesh")]
    private static void SaveMesh(MenuCommand menuCommand)
    {
        var c = menuCommand.context as MeshFilter;
        if (c.sharedMesh == null)
            return;
        
        var path = EditorUtility.SaveFilePanelInProject("Save Mesh", "Mesh", "asset", "");
        if (string.IsNullOrEmpty(path))
            return;
 
        var mesh = GameObject.Instantiate(c.sharedMesh);
        var asset = AssetDatabase.LoadAssetAtPath<Mesh>(path);
        if (asset != null)
        {
            EditorUtility.CopySerialized(asset, mesh);
        }
        else
        {
            AssetDatabase.CreateAsset(mesh, path);
        }
        
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }
}