유니티/수업 내용
스크립터블 오브젝트 생성 툴
hyunjin-dev-log
2021. 12. 23. 16:56
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.Linq;
using System.IO;
using UnityEditorInternal;
public class PrintFileNameEditor : EditorWindow
{
private Object[] objs;
public ReorderableList list;
private string saveFileName;
[MenuItem("Tools/PrintFileNameEditor")]
static void OpenWindow()
{
GetWindow<PrintFileNameEditor>();
}
private void OnEnable()
{
list = new ReorderableList(objs, typeof(Texture2D));
}
void OnGUI()
{
GUILayout.BeginHorizontal();
if (GUILayout.Button("reset")) {
this.objs = null;
this.saveFileName = "";
}
if (GUILayout.Button("build"))
{
string[] list = new string[this.objs.Length];
int idx = 0;
foreach (var obj in this.objs) {
list[idx++] = obj.name;
}
ItemNameScriptableObject asset = ScriptableObject.CreateInstance<ItemNameScriptableObject>();
if (string.IsNullOrEmpty(this.saveFileName)) {
saveFileName = "ItemDataObj";
}
AssetDatabase.CreateAsset(asset, string.Format("Assets/ScriptableObjects/{0}.asset", this.saveFileName));
AssetDatabase.SaveAssets();
EditorUtility.FocusProjectWindow();
Selection.activeObject = asset;
asset.itemNames = list;
}
GUILayout.EndHorizontal();
DragAndDrop.visualMode = DragAndDropVisualMode.Generic;
if (Event.current.type == EventType.DragExited)
{
this.objs = DragAndDrop.objectReferences;
}
EditorGUILayout.BeginVertical();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("스크립터블 파일명 : ", GUILayout.Width(120));
this.saveFileName = EditorGUILayout.TextField(this.saveFileName);
EditorGUILayout.EndHorizontal();
if (objs != null)
{
for (int i = 0; i < this.objs.Length; i++)
{
this.objs[i] = EditorGUILayout.ObjectField(this.objs[i], typeof(Texture2D), true);
if (this.objs[i] == null) {
var list = this.objs.ToList();
list.Remove(this.objs[i]);
this.objs = list.ToArray();
}
}
}
EditorGUILayout.EndVertical();
}
private void OnSelectionChange()
{
try
{
var imgs = Selection.GetFiltered<Texture2D>(SelectionMode.Assets);
Debug.Log(imgs.Count());
}
catch (IOException e1)
{
Debug.Log("하위 그림 파일을 찾을수 없습니다.");
}
catch (System.InvalidOperationException e2) {
Debug.Log("게임 오브젝트는 선택 할수 없습니다.");
}
}
}