Проблема: мне нужно поделиться кодом между несколькими проектами в Unity. Этот код постоянно меняется в процессе работы над проектами. Поэтому мне нужно, чтобы мой код был доступен как отдельная сборка и был включен в каждую душу Unity в Visual Studio 2015.

Вопрос: как внести изменения в общую сборку, чтобы она автоматически обновлялась для других проектов и для редактора Unity?

0
Dzianis Yafimau 3 Янв 2016 в 17:32

2 ответа

Лучший ответ

Допустим, у меня есть общий проект здесь: c: \ UnityProjects \ DesignPatterns \, и его нужно включить в мой проект Unity здесь: c: \ UnityProjects \ Game \

Решение:

  1. Переместите весь общий код в отдельный проект (c: \ Unity Projects \ Design Patterns)
  2. Включите этот проект в решение для всех своих проектов Unity. Это позволяет вам вносить изменения, когда они вам понадобятся, без отдельного повторного открытия общего проекта.
  3. Сейчас все работает нормально, за исключением того, что редактор Unity не видит вашу внешнюю сборку. Вы должны скопировать его в любую папку с ресурсами в Unity. Unity автоматически обнаружит это и создаст файл .meta. Создадим для этого папку: c: \ UnityProjects \ Game \ Assets \ ExternalDLLs \
  4. Мы не хотим копировать недавно построенную сборку в этот каталог, мы хотим, чтобы это происходило автоматически. И командная строка событий Visual Studio после сборки здесь, чтобы помочь в этом. Щелкните правой кнопкой мыши проект CSharp и выберите свойства, затем перейдите на вкладку События сборки и добавьте следующую строку в командную строку события после сборки:

    xcopy $ (ProjectDir) .. \ DesignPatterns \ bin \ $ (ConfigurationName) \ DesignPatterns.dll "" $ (ProjectDir) \ Assets \ ExternalDLLs \ DesignPatterns.dll "/ Y

Теперь каждый раз, когда мы создаем решение, эта команда копирует нашу dll из выходной папки общего проекта в папку ресурсов нашего проекта.

Обратите внимание : общий проект должен быть создан до сборки сборки единого кода. Это тот случай, когда вы всегда делаете сборку решения. В других случаях рассмотрите возможность копирования сборки из временного каталога Unity (у вас есть макросы для выбора этой папки).

0
Dzianis Yafimau 3 Янв 2016 в 14:32

Ваше решение находится в подмодулях с контролем версий. У вас есть одно репо по основному проекту. Тогда у вас есть папка внутри другого репо. Это подмодуль. Он отображается серым на вашем основном репо и не фиксируется.

https://git-scm.com/book/en/v2/Git-Tools-Submodules

Он действительно работает с другими системами контроля версий.

Смысл этого шаблона в том, что вы работаете над проектом A с помощью подмодуля утилит. Утилита - это папка внутри папки Assets. Затем вы изменяете Utility.cs и помещаете его в репозиторий Utility.

Проект B использует подмодуль утилит и выполняет вытягивание, ваша модификация присутствует без изменения остальной части проекта B. Очевидно, это включает в себя все проблемы, связанные с контролем версий, то есть конфликты, если проект B работал с утилитой, вероятные сбои в других проектах, если вы измените реализацию утилиты и т. д. (впрочем, ничего необычного).

С другой стороны, это простой способ передать общий код независимым проектам.

1
Everts 3 Янв 2016 в 14:45