Как перенести общий код во внешнюю сборку для использования в проектах Unity 3d?

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

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


person Dzianis Yafimau    schedule 03.01.2016    source источник


Ответы (2)


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

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

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

Смысл этого паттерна в том, что вы работаете над проектом А с служебным подмодулем. утилита — это папка внутри папки Assets. Затем вы изменяете Utility.cs и отправляете его в репозиторий Utility.

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

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

person Everts    schedule 03.01.2016
comment
Это хороший шаблон для развития моего решения. Предположим, что у нас вообще нет системы контроля версий? Или используйте другой CVS. Также моя основная проблема заключается в том, чтобы избегать извлечения/передачи, сборки, копирования и т. д. Я просто хочу внести изменения в свой код, а также в общий код, перестроить решение и вернуться к Unity, чтобы мои изменения в обеих сборках были готовы к запуску. в редакторе. - person Dzianis Yafimau; 03.01.2016
comment
Описанный вами шаблон может подойти для небольшого проекта. Но рассмотрим фреймворк, и каждую сборку придется автоматизировать за ночь, чтобы она была готова утром и не занимала слишком много времени. Может быть, даже больше сложности для небольшой команды. - person Everts; 03.01.2016
comment
Это правда, но, как я уже сказал, подмодули будут хорошей оценкой. Большая потребность в том, чтобы новые изменения кода работали. После некоторых вех этот код будет отправлен и синхронизирован с репо, поэтому ничего плохого в моем решении я не вижу. Или вы видите что-то, что можно изменить? - person Dzianis Yafimau; 03.01.2016
comment
О, мы также можем использовать пакеты nuget для дальнейшей оценки решения. - person Dzianis Yafimau; 03.01.2016

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

Решение:

  1. Переместите весь общий код в отдельный проект (c:\UnityProjects\DesignPatterns)
  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. Это тот случай, когда вы всегда делаете сборку решения. В других случаях рассмотрите возможность копирования сборки из временного каталога Unity (у вас есть макросы для выбора этой папки).

person Dzianis Yafimau    schedule 03.01.2016