개발을 하다보면 리소스가 수시로 변경되고 추가되고 해당 리소스를 Scene 에 붙어있는 script 상에서 사용한다고 하는 경우가 있습니다.
이때 자동화 기능을 통해 폴더의 리소스들을 script 변수에 값을 할당하는 방법입니다.
ResourceScene 이라는 이름의 scene 을 열고 /Assets/_ResourceScene/ 하위의 폴더들에서 prefab 과 png 파일을 가져온 후 해당 파일을 ResourcePool 의 container 에 담아두는 코드입니다.
ResourcePoolEditor.cs
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 | using UnityEngine; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine.SceneManagement; using System.IO; public class ResourcePoolEditor : MonoBehaviour { [MenuItem("Build/SetResourcePool")] public static void SetResourcePool() { Scene scene = EditorSceneManager.OpenScene("Assets/__Scene/ResourceScene.unity"); ResourcePool pool = GameObject.Find("ResourcePool").GetComponent<ResourcePool>(); pool.objects.Clear(); pool.UIs.Clear(); pool.sprites.Clear(); string[] arr = Directory.GetFiles(Directory.GetCurrentDirectory() + "/Assets/_ResourceScene/Object/", "*.prefab", SearchOption.AllDirectories); foreach (string FullPath in arr) { if (!FullPath.Contains(".meta")) { int index1 = FullPath.IndexOf("Assets/_ResourceScene/"); string path = FullPath.Substring(index1); path = path.Replace("\\", "/"); #if UNITY_EDITOR GameObject temp = AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)) as GameObject; if (temp != null) pool.objects.Add(AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)) as GameObject); #endif } } arr = Directory.GetFiles(Directory.GetCurrentDirectory() + "/Assets/_ResourceScene/Sprite/", "*.png", SearchOption.AllDirectories); foreach (string FullPath in arr) { if (!FullPath.Contains(".meta")) { int index1 = FullPath.IndexOf("Assets/_ResourceScene/"); string path = FullPath.Substring(index1); path = path.Replace("\\", "/"); #if UNITY_EDITOR Sprite spr = AssetDatabase.LoadAssetAtPath(path, typeof(Sprite)) as Sprite; if (spr != null) pool.sprites.Add(AssetDatabase.LoadAssetAtPath(path, typeof(Sprite)) as Sprite); #endif } } EditorSceneManager.SaveScene(scene); } } | cs |
ResourcePool.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using UnityEngine; using JaykayFramework; using System.Collections.Generic; public class ResourcePool : MonoBehaviour { public List<GameObject> objects; public List<GameObject> UIs; public List<Sprite> sprites; void Awake () { foreach(GameObject obj in objects) ObjectMgr.instance.AddToDicObject(obj.name, obj); foreach (GameObject obj in UIs) BuildUI.Instance.AddToDicUIPrefabs(obj.name, obj); foreach (Sprite obj in sprites) DataMgr.instance.AddToDicSprite(obj.name, obj); } } | cs |
'Unity3D' 카테고리의 다른 글
UnityEditor.LoadAssetAtPath 을 이용해 project folder 상의 리소스를 Scene 의 스크립트 변수에 값 할당하기 (0) | 2016.07.07 |
---|---|
Hierarchy 상의 GameObject 의 이름으로 스크립트 상에 같은 이름의 변수에 값 할당하기 (0) | 2016.07.06 |
Unity Test Tools (0) | 2016.06.23 |