В общем решил написать немного о том, как создавать расширять редактор Unity. Информация будет не новой, но каждый может в ней найти что-то для себя, поэтому приступим. В итоге получится примерно следующий пользовательский сборщик Unity проектов

(фитча доступна только в pro версии, однако принципы создания этого Builder'a можно применять в любых других задачах). Для тех кто все знает заметка может показаться поверхностной и бесполезной.
Итак, поехали!
Создаем класс, называем его, к примеру СustomBuilder.cs
А теперь сам листинг, в комментариях все поясню:

(фитча доступна только в pro версии, однако принципы создания этого Builder'a можно применять в любых других задачах). Для тех кто все знает заметка может показаться поверхностной и бесполезной.
Итак, поехали!
Создаем класс, называем его, к примеру СustomBuilder.cs
А теперь сам листинг, в комментариях все поясню:
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
public class CustomBuilder : EditorWindow
{
private BuildTarget build_type = BuildTarget.StandaloneWindows;
private BuildOptions build_options = BuildOptions.None;
private string build_name = "TestBuild";
// %#q - так задаем горячие клавиши Ctrl+Shift+Q
// 0 - приоритет, в общем чтоб в списке меню стоял первым
[MenuItem("Builder/Build PC %#q", false, 0)]
public static void StartBuilder()
{
var window = ScriptableObject.CreateInstance ();
window.title = "Builder";
// max = min - дабы не ресайзилось окно.
window.minSize = new Vector2 (300, 150);
window.maxSize = new Vector2 (300, 150);
window.Show ();
}
private void OnGUI()
{
EditorGUILayout.LabelField("Simple Project Builder v.0.0.1");
// отступ 10 пикселов вниз
GUILayout.Space (10);
build_name = EditorGUILayout.TextField (build_name);
// перекрашиваем фон кнопки в зеленый.
GUI.backgroundColor = Color.green;
if (GUILayout.Button ("Building " + build_name))
{
// чтобы не усложнять код расширение поставил .exe
// что будет работать лишь для PC
string build_path = "Build/PC/" + build_name + ".exe";
// вот она главная строчка: передаем массив путей
// к сценам включаемым в сборку, путь и имя для сборки,
// тип сборки и настройки
BuildPipeline.BuildPlayer (GetPaths (), build_path, build_type, build_options);
this.Close();
}
GUI.backgroundColor = Color.gray;
build_type = (BuildTarget)EditorGUILayout.EnumPopup ("Type:",build_type);
build_options = (BuildOptions)EditorGUILayout.EnumPopup ("Options:", build_options);
EditorGUILayout.HelpBox ("Это тестовый пример сборщика проектов!", MessageType.Info);
}
// возвращает пути всех сцен в проекта
private string[] GetPaths()
{
// получаем пути всех ресурсов
string[] all_paths = AssetDatabase.GetAllAssetPaths();
List< string > paths = new List< string >();
for (int i = 0; i < all_paths.Length; i++)
{
// добавляем в список лишь пути сцен
if(all_paths[i].EndsWith(".unity"))
paths.Add(all_paths[i]);
}
string[] scenes_paths = paths.ToArray();
return scenes_paths;
}
}
Код был специально упрощен и порезан, дабы не загромождать пост и не запудривать мозги начинающим, так что ругаться не стоит. Ну вот и все!
Комментариев нет:
Отправить комментарий