에디터 스크립트에서 직접 스크립트를 생성하는 방법
// 코드를 받아 스크립트를 생성하거나 업데이트 하는 함수
private void CreateScript(string path, string code)
{
File.WriteAllText("Assets/" + path, code);
AssetDatabase.Refresh();
}
Path와 코드 내용을 입력받아 해당 Path에 스크립트를 생성할 수 있다.
다음은 팝업 접근에 용이하도록 MyPopups.cs를 생성하는 에디터 코드이다.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using UnityEditor;
using UnityEngine;
namespace Waker.Popups.Editors
{
[CustomEditor(typeof(PopupController))]
public class PopupControllerEditor : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if (GUILayout.Button("Generate MyPopups.cs"))
{
PopupController instance = target as PopupController;
var popups = instance.GetComponentsInChildren<PopupBase>();
string code = CreateCode(popups);
CreateScript(code);
}
}
private string CreateCode(IEnumerable<PopupBase> popups)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("using Waker.Popups;");
sb.AppendLine("// PopupController.cs에 의해 자동으로 생성된 스크립트입니다. 네임스페이스를 추가하거나 에러를 수정하는 등 자유롭게 수정 가능합니다.");
sb.AppendLine("public static class MyPopups");
sb.AppendLine("{");
foreach (var popup in popups)
{
string typeName = popup.GetType().Name;
string popupName = popup.PopupName;
string propertyName = String.Concat(popupName.Where(c => !Char.IsWhiteSpace(c)));
sb.AppendLine($"\tpublic static {typeName} {propertyName} => PopupController.Instance.Get<{typeName}>(\"{popupName}\");");
}
sb.AppendLine("}");
return sb.ToString();
}
// 코드를 받아 스크립트를 생성하거나 업데이트 하는 함수
private void CreateScript(string code)
{
File.WriteAllText("Assets/MyPopups.cs", code);
AssetDatabase.Refresh();
}
}
}
'유니티 & C#' 카테고리의 다른 글
BigInteger를 유닛 단위 문자열로 변환하는 함수 (0) | 2020.12.27 |
---|---|
유니티 UGUI 드래그 앤 드랍 (0) | 2020.11.11 |
유니티 Android SDK 업데이트 (0) | 2020.10.03 |
유니티에서 다국어 폰트 지원하는 방법 (1) | 2020.10.01 |
Pagination of IEnumerable<T> (0) | 2020.09.29 |