Сборка unitypackage + ProjectSettings

При переносе проекта с одного компьютера на другой, чаще всего удобней использовать упаковщик Unity, для создания архива unitypackage. Но парой, при импорте пакета, выясняется, что сцены оказываются нерабочие, либо в силу особенностей настроек ввода клавиш, либо, например, из-за того, что в настройках проекта отсутствуют необходимые слои, теги и прочее. Это происходит потому, что хоть в оригинале были все нужные настройки, они не включаются в состав unitypackage. Очевидным решением данной проблемы, является как раз добавление настроек проекта в состав архива, целиком или отдельные настройки проекта, например, только слои. Собственно этим мы и займемся.

Мы предлагаем свой, простой вариант сборки unitypackage вместе с настройками проекта. Обратите внимание, что этот инструмент автоматически добавит в архив все ассеты из папки Assets, ненужно выбирать их вручную.

Итак, добавим в проект следующий скрипт:

#if UNITY_EDITOR
using UnityEditor;
using System.IO;
using System.Collections.Generic;
using UnityEngine;

public class ExportPackage : EditorWindow
{
    bool[] valuesCheck;
    string[] values;
    string fileName;
    bool check, all;

    [MenuItem("Window/Custom Export Package...")]
    static void ShowWindow()
    {
        ExportPackage editor = GetWindow<ExportPackage>();
        editor.Init();
    }

    void Init()
    {
        all = true;
        check = true;
        values = Directory.GetFiles("ProjectSettings", "*.asset");
        valuesCheck = new bool[values.Length];

        for (int i = 0; i < values.Length; i++)
        {
            valuesCheck[i] = check;
        }

        fileName = PlayerSettings.productName;
    }

    void OnGUI()
    {
        EditorGUILayout.Separator();
        fileName = EditorGUILayout.TextField("Имя файла:", fileName);
        EditorGUILayout.Separator();
        all = EditorGUILayout.ToggleLeft("Добавить все ассеты проекта в сборку?", all, EditorStyles.boldLabel);
        EditorGUILayout.HelpBox(all ? "Будут включены все ассеты проекта и те настройки, которые выбраны ниже." : "Будут добавлены только настройки выбранные ниже...", MessageType.Info);
        EditorGUILayout.Separator();
        EditorGUILayout.BeginVertical();
        EditorGUILayout.LabelField("Project Settings", EditorStyles.boldLabel);
        EditorGUI.indentLevel++;

        for (int i = 0; i < values.Length; i++)
        {
            valuesCheck[i] = EditorGUILayout.ToggleLeft(Path.GetFileNameWithoutExtension(values[i]), valuesCheck[i]);
        }

        EditorGUI.indentLevel--;
        EditorGUILayout.EndVertical();
        EditorGUILayout.Separator();

        if (GUILayout.Button(check ? "Снять все отметки" : "Выбрать всё", GUILayout.Height(30)))
        {
            check = !check;

            for (int i = 0; i < values.Length; i++)
            {
                valuesCheck[i] = check;
            }
        }

        EditorGUILayout.Separator();
        EditorGUILayout.BeginHorizontal();

        if (GUILayout.Button("Обновить / Сбросить", GUILayout.Height(30)))
        {
            Init();
        }
        if (GUILayout.Button("Экспортировать", GUILayout.Height(30)))
        {
            Export();
        }

        EditorGUILayout.EndHorizontal();
        EditorGUI.DropShadowLabel(new Rect(0, 0, position.width, position.height-5), "© 2019 NULLcode Studio");
    }

    void Export()
    {
        List<string> projectContent = new List<string>();
        if(all) projectContent.Add("Assets");

        for (int i = 0; i < values.Length; i++)
        {
            if (valuesCheck[i])
            {
                projectContent.Add(values[i]);
            }
        }

        if (projectContent.Count == 0)
        {
            Debug.LogWarning("Custom Export Package --> Не выбран ни одни ассет, экспорт отменен.");
            return;
        }

        AssetDatabase.ExportPackage(projectContent.ToArray(), fileName + ".unitypackage", ExportPackageOptions.Interactive | ExportPackageOptions.Recurse | ExportPackageOptions.IncludeDependencies);
    }
}
#endif
Теперь на вкладке Window будет доступно наше окно:

Сборка unitypackage + ProjectSettings


В открывшемся окне, можно выбрать какие файлы настроек включить в сборку и выбрать имя файла.

Перед экспортом unitypackage, не забывайте сохранить свой проект!

Скачать скрипты:
Внимание! Посетители, находящиеся в группе Гости, не могут скачивать файлы.
Тестировалось на: Unity 2018.3.0

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

Офлайн
igorm 11 января 2019
А что Git уже отменили? Зачем что-то собирать в пакеты, потом распаковывать?
Можно сделать реп с общими префабами и скриптами и подтягивать его в новый проект
Офлайн
andlancer 5 января 2019
Ребята кто пишет статьи для юнити
вы большие молорики))
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Яндекс.Метрика