7/24/2014

Unity Custom Builder

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



(фитча доступна только в 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;
 }
}

Код был специально упрощен и порезан, дабы не загромождать пост и не запудривать мозги начинающим, так что ругаться не стоит. Ну вот и все!

Комментариев нет:

Отправить комментарий