c# dll и с чем их едят
![Сообщение Сообщение](./styles/maxthon/imageset/icon_post_target.gif)
Поговорим о том как использовать библиотеки классов в своих проектах на
.
Для начала рассмотрим несколько плюсов их использования.
Плюсы библиотек классов:
1) в удобном использование namespace
2) классы, которые не являются MonoBehaviour cкрываются -> отсутствие свалки в проекте
3) защита от школьников: многих отпугнет само использование библиотек, а если пройтись обфускатором, то читаемость кода значительно упадет.
4) удобная транспортировка кода, например если Вы используете какой-то врапер функций, очень удобно копировать всего лишь один файл и сразу же приступать к работе.
5) хранение внутренних ресурсов (картинок, звуков и тд)
6) да просто красиво и удобно (:
Теперь попробуем создать свою библиотеку и запустить с ней проект.
Первое, что мы должны сделать - это создать в любом IDE библиотеку классов. В Microsoft Visual Studio C# Professional это выглядит так File->New->Project
![Изображение](https://habrastorage.org/files/e34/26a/f03/e3426af035b74b619f27c1dfd170ca0e.jpg)
Чтобы работать с UnityEngine ее нужно пролинковать, делается это так - в каждой библиотеке есть закладка References в окне Solution Explorer, кликаем правой, выбираем Add Reference
![Изображение](https://habrastorage.org/files/25e/9b6/5b3/25e9b65b3c354ac2960be7dc064491ed.jpg)
Файл UnityEngine.dll находится в %ProgramFiles%\Unity\Editor\Data\Managed\
![Изображение](https://habrastorage.org/files/895/762/ab3/895762ab3822450d8e79b02dbfa06e4d.jpg)
При работе в дальнейшем можно использовать закладку Recent, там хранятся последние использованные библиотеки:
![Изображение](https://habrastorage.org/files/d3d/76f/7dc/d3d76f7dc7ae4f0583f3a0088a0bd9d3.jpg)
После добавления ссылки на библиотеки, она появится в нужной закладке, и в Вашем проекте можно будет писать так using UnityEngine;
Отключим локальное копирование библиотеки, чтобы не было конфликтов, эти библиотеки уже есть в окружении юнити:
![Изображение](https://habrastorage.org/files/e4e/dce/879/e4edce87912f4745b76bf8e5affd7509.jpg)
![Изображение](https://habrastorage.org/files/2f3/4cf/248/2f34cf248ee1432f8e866c5aa93b8122.jpg)
Теперь настроим сохранение сборки в нужное место, т.е в %НашПроектНаЮнити%\Assets\. Для начала зайдем в настройки нашего проекта Project - Project Properties
![Изображение](https://habrastorage.org/files/19b/09b/5e8/19b09b5e8a4f44d6b3e4b3fe330e8e57.jpg)
В закладку Build
![Изображение](https://habrastorage.org/files/9ed/546/d1f/9ed546d1f7aa41ccbbfcecb93d6c97dd.jpg)
Там мы увидим поле Output Path. Этот тот путь по которому будет собираться наша библиотека(-и).
![Изображение](https://habrastorage.org/files/a81/dcf/c81/a81dcfc818494c5dba639874dd86a756.jpg)
Не забываем, что у любого проекта есть два состояния Debug\Release и пути сборки у них будут разные, т.е если Вы переключите конфигурацию, то заметите - путь изменился.
![Изображение](https://habrastorage.org/files/6d6/ecd/400/6d6ecd400237442e81e36523ea59a2c4.jpg)
А так же вам понадобится кнопка Advanced..., находится она снизу в этом же окне
![Изображение](https://habrastorage.org/files/7d8/5f2/a9b/7d85f2a9b28745c4b0c4304113522cab.jpg)
Там можно отключить Debug Info, чтобы при сборке у Вас не было символов отладки, если они необходимы, то нужно в настройках проекта в Build Events -> Post-build прописать генерацию поддерживаемых Mono символов (.mdb) строка будет примерно такая
"c:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\pdb2mdb.exe" $(TargetFileName)
![Изображение](https://habrastorage.org/files/0a0/4f2/b37/0a04f2b378124e01a3e189b561fa91f0.jpg)
Сам момент написания кода я затрагивать не буду. Предположим, что Вы уже описали свои классы и пришло время попробовать запустить код в![Unity 3D [unity 3D]](./images/smilies/unity.gif)
Чтобы собрать все решение нужно нажать кнопку F6, соберутся все библиотеки в солюшене, если они изменялись. Чтобы собрать библиотеку под выделением нажимаем Shift+F6, подробнее можно посмотреть в менюшке Build
![Изображение](https://habrastorage.org/files/8c4/3f5/246/8c43f524669e4004a76d227c3c3eb376.jpg)
Если вы правильно указали путь, то .dll окажется сразу в проекте. Все MonoBehaviour можно просмотреть просто раскрыв библиотеку, у меня получилось вот так:
![Изображение](https://habrastorage.org/files/0ea/b16/c5a/0eab16c5ae32487cbe62b4c175b9295f.jpg)
Пример решения(Solution) из четырех .dll:
![Изображение](https://habrastorage.org/files/722/7eb/60e/7227eb60ee164d209021ce73e26a7d01.jpg)
Во-первых, версия сборки должна быть жестко .NET Framework 3.5, если меньше, то Вы не сможете пролинковать UnityEngine.dll и UnityEditor.dll, а если больше, то тогда не поддерживает Mono в Unity3d.
Во-вторых, Editor классы можно прятать внутри dll,но в связи с тонкостями сборки готового билда, едитор классы нужно прятать в отдельном от монобех dll, а получившуюся сборку класть обязательно в папку Editor.
В некоторых случаях нужно будет настроить порядок выполнения скриптов, находится это в Edit->Project Settings->Script Execution Order.
Если есть дополнения буду рад.
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
Для начала рассмотрим несколько плюсов их использования.
Плюсы библиотек классов:
1) в удобном использование namespace
2) классы, которые не являются MonoBehaviour cкрываются -> отсутствие свалки в проекте
3) защита от школьников: многих отпугнет само использование библиотек, а если пройтись обфускатором, то читаемость кода значительно упадет.
4) удобная транспортировка кода, например если Вы используете какой-то врапер функций, очень удобно копировать всего лишь один файл и сразу же приступать к работе.
5) хранение внутренних ресурсов (картинок, звуков и тд)
6) да просто красиво и удобно (:
Теперь попробуем создать свою библиотеку и запустить с ней проект.
Как начать использовать .dll в своем проекте
Первое, что мы должны сделать - это создать в любом IDE библиотеку классов. В Microsoft Visual Studio C# Professional это выглядит так File->New->Project
![Изображение](https://habrastorage.org/files/e34/26a/f03/e3426af035b74b619f27c1dfd170ca0e.jpg)
Чтобы работать с UnityEngine ее нужно пролинковать, делается это так - в каждой библиотеке есть закладка References в окне Solution Explorer, кликаем правой, выбираем Add Reference
![Изображение](https://habrastorage.org/files/25e/9b6/5b3/25e9b65b3c354ac2960be7dc064491ed.jpg)
Файл UnityEngine.dll находится в %ProgramFiles%\Unity\Editor\Data\Managed\
![Изображение](https://habrastorage.org/files/895/762/ab3/895762ab3822450d8e79b02dbfa06e4d.jpg)
При работе в дальнейшем можно использовать закладку Recent, там хранятся последние использованные библиотеки:
![Изображение](https://habrastorage.org/files/d3d/76f/7dc/d3d76f7dc7ae4f0583f3a0088a0bd9d3.jpg)
После добавления ссылки на библиотеки, она появится в нужной закладке, и в Вашем проекте можно будет писать так using UnityEngine;
Отключим локальное копирование библиотеки, чтобы не было конфликтов, эти библиотеки уже есть в окружении юнити:
![Изображение](https://habrastorage.org/files/e4e/dce/879/e4edce87912f4745b76bf8e5affd7509.jpg)
![Изображение](https://habrastorage.org/files/2f3/4cf/248/2f34cf248ee1432f8e866c5aa93b8122.jpg)
Теперь настроим сохранение сборки в нужное место, т.е в %НашПроектНаЮнити%\Assets\. Для начала зайдем в настройки нашего проекта Project - Project Properties
![Изображение](https://habrastorage.org/files/19b/09b/5e8/19b09b5e8a4f44d6b3e4b3fe330e8e57.jpg)
В закладку Build
![Изображение](https://habrastorage.org/files/9ed/546/d1f/9ed546d1f7aa41ccbbfcecb93d6c97dd.jpg)
Там мы увидим поле Output Path. Этот тот путь по которому будет собираться наша библиотека(-и).
![Изображение](https://habrastorage.org/files/a81/dcf/c81/a81dcfc818494c5dba639874dd86a756.jpg)
Не забываем, что у любого проекта есть два состояния Debug\Release и пути сборки у них будут разные, т.е если Вы переключите конфигурацию, то заметите - путь изменился.
![Изображение](https://habrastorage.org/files/6d6/ecd/400/6d6ecd400237442e81e36523ea59a2c4.jpg)
А так же вам понадобится кнопка Advanced..., находится она снизу в этом же окне
![Изображение](https://habrastorage.org/files/7d8/5f2/a9b/7d85f2a9b28745c4b0c4304113522cab.jpg)
Там можно отключить Debug Info, чтобы при сборке у Вас не было символов отладки, если они необходимы, то нужно в настройках проекта в Build Events -> Post-build прописать генерацию поддерживаемых Mono символов (.mdb) строка будет примерно такая
"c:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\pdb2mdb.exe" $(TargetFileName)
![Изображение](https://habrastorage.org/files/0a0/4f2/b37/0a04f2b378124e01a3e189b561fa91f0.jpg)
Сам момент написания кода я затрагивать не буду. Предположим, что Вы уже описали свои классы и пришло время попробовать запустить код в
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
Чтобы собрать все решение нужно нажать кнопку F6, соберутся все библиотеки в солюшене, если они изменялись. Чтобы собрать библиотеку под выделением нажимаем Shift+F6, подробнее можно посмотреть в менюшке Build
![Изображение](https://habrastorage.org/files/8c4/3f5/246/8c43f524669e4004a76d227c3c3eb376.jpg)
Если вы правильно указали путь, то .dll окажется сразу в проекте. Все MonoBehaviour можно просмотреть просто раскрыв библиотеку, у меня получилось вот так:
![Изображение](https://habrastorage.org/files/0ea/b16/c5a/0eab16c5ae32487cbe62b4c175b9295f.jpg)
Пример решения(Solution) из четырех .dll:
![Изображение](https://habrastorage.org/files/722/7eb/60e/7227eb60ee164d209021ce73e26a7d01.jpg)
Тонкости
Во-первых, версия сборки должна быть жестко .NET Framework 3.5, если меньше, то Вы не сможете пролинковать UnityEngine.dll и UnityEditor.dll, а если больше, то тогда не поддерживает Mono в Unity3d.
Во-вторых, Editor классы можно прятать внутри dll,но в связи с тонкостями сборки готового билда, едитор классы нужно прятать в отдельном от монобех dll, а получившуюся сборку класть обязательно в папку Editor.
В некоторых случаях нужно будет настроить порядок выполнения скриптов, находится это в Edit->Project Settings->Script Execution Order.
Если есть дополнения буду рад.