Unity/CommonScript
Save Avatar Asset
잉여씨
2018. 11. 23. 12:40
Hierarchy 에서 선택된 오브젝트의 Avatar를 Asset 형태로 저장하는 Editor 메뉴 스크립트입니다.
선택된 GameObject의 Animator가 링크하는 Avatar를 Avatar 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 | using System.Linq; using UnityEditor; using UnityEngine; public class SaveAvatarAssets { [MenuItem("Tools/Save Assets/Save Avatar", validate = true)] public static bool CanSaveAvatar() { GameObject[] selectedObjects = Selection.gameObjects; if (selectedObjects.Length == 0) { return false; } return selectedObjects.Any(so => (so.GetComponent<Animator>() != null)); } [MenuItem("Tools/Save Assets/Save Avatar")] public static void SaveAvatar() { GameObject[] selectedObjects = Selection.gameObjects; SaveAvatar(selectedObjects); } public static void SaveAvatar(GameObject[] selectedObjects) { for (int i = 0; i < selectedObjects.Length; ++i) { GameObject selected = selectedObjects[i]; Animator animator = selected.GetComponent<Animator>(); if (animator != null) { SaveAvatar(animator.avatar, selected.name); } } } public static void SaveAvatar(Avatar avatar, string name) { string path = "Assets/" + name + ".prefab"; if (!string.IsNullOrEmpty(AssetDatabase.GetAssetPath(avatar))) { Avatar tempAvatar = (Avatar)UnityEngine.Object.Instantiate(avatar); AssetDatabase.CreateAsset(tempAvatar, AssetDatabase.GenerateUniqueAssetPath(path)); Debug.Log("Avatar saved: " + path); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } } } | cs |