Hierarchy 에서 선택된 오브젝트의 Mesh를 Asset 형태로 저장하는 Editor 메뉴 스크립트입니다.
선택된 GameObject의 SkinnedMeshRenderer 또는 MeshFilter가 링크하는 Mesh를 Mesh Asset으로 저장합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | using System.Linq; using UnityEditor; using UnityEngine; public class SaveMeshAssets { [MenuItem("Tools/Save Assets/Save Mesh", validate = true)] public static bool CanSaveMesh() { GameObject[] selectedObjects = Selection.gameObjects; if (selectedObjects.Length == 0) { return false; } return selectedObjects.Any(so => (so.GetComponent<MeshFilter>() != null || so.GetComponent<SkinnedMeshRenderer>() != null)); } [MenuItem("Tools/Save Assets/Save Mesh")] public static void SaveMesh() { GameObject[] selectedObjects = Selection.gameObjects; SaveMesh(selectedObjects); } public static void SaveMesh(GameObject[] selectedObjects) { for (int i = 0; i < selectedObjects.Length; ++i) { GameObject selected = selectedObjects[i]; MeshFilter meshFilter = selected.GetComponent<MeshFilter>(); if (meshFilter != null) { SaveMesh(meshFilter.sharedMesh, selected.name); } SkinnedMeshRenderer smr = selected.GetComponent<SkinnedMeshRenderer>(); if (smr != null) { SaveMesh(smr.sharedMesh, selected.name); } } } public static void SaveMesh(Mesh mesh, string name) { string path = "Assets/" + name + ".prefab"; if (!string.IsNullOrEmpty(AssetDatabase.GetAssetPath(mesh))) { Mesh tempMesh = (Mesh)UnityEngine.Object.Instantiate(mesh); AssetDatabase.CreateAsset(tempMesh, AssetDatabase.GenerateUniqueAssetPath(path)); Debug.Log("Mesh saved: " + path); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } } } | cs |
'Unity > CommonScript' 카테고리의 다른 글
Save Avatar Asset (0) | 2018.11.23 |
---|