Pull to refresh

Новое в Unity 2017.3. Компиляция скриптов в отдельные файлы сборки

Reading time2 min
Views11K
В предыдущих версиях Unity скрипты собирались в единую сборку Assembly-CSharp.dll.
И при добавлении новых скриптов увеличивалось время компиляции. Теперь в новой версии появилась возможность определять собственные управляемые сборки, основанные на скриптах внутри папки, что существенно сокращает время компиляции, особенно в больших проектах. Теперь можно думать о каждой управляемой сборке как о единой библиотеке в проекте Unity.

image

На рисунке выше показано, как вы можете разделить сценарии проекта на несколько сборок. Если вы только изменяете скрипты в Main.dll, ни одну из других сборок не потребуется перекомпилировать. Поскольку Main.dll содержит меньше скриптов, он также компилируется быстрее, чем Assembly-CSharp.dll.

Аналогичным образом, изменения скриптов, которые вы делаете в Stuff.dll, будут приводить только к перекомпиляции файлов Main.dll и Stuff.dll.

Как использовать файлы определения сборки


Файлы определения сборки — это asset файлы, созданные вами, перейдя в Assets → Create → Assembly Definition. Это файл с расширением .asmdef.

Примечание. Имя папки, в которой находится файл определения сборки, и имя файла файла определения сборки не влияют на имя сборки.

image

Пример:

Создадим папку Scripts. А ней папки Locomotion, Editor, Utils. В папке Locomotion еще две папки Normal и Anvanced. Теперь создаем скрипты

Utils → MoveExtension.cs

Locomotion → Anvanced → AdvJump.cs
Locomotion → Anvanced → AdvMoveForward.cs

Locomotion → Normal → Jump.cs MoveForward
Locomotion → Normal → MoveForward.cs

Locomotion → LookForward.cs

Editor → MoveForwardEditor.cs

И скрипте MoveForwardEditor определим немного кода, чтобы нужна была ссылка на MoveForward.

using UnityEditor;

[CustomEditor(typeof(MoveForward))]
public class MoveForwardEditor : Editor
{

}

Теперь чтобы нам создать управляемы сборки нужно в папке со скриптами создать .asmdef файлы. Причем если этот файл лежит в папке допустим Locomotion, то в файл сборки подхватит и скрипты из папок Advanced и Normal, если в этих папках не определены свои файлы сборки.

В папке Utils создаем сборку UtilityAsm.asmdef
В папке Locomotion создаем файл сборки LocomotionAsm.asmdef
В папке Locomotion → Anvanced → LocomotionAdvancedAsm.asmdef
В папке Editor EditorAsm.asmdef

В папке Locomotion → Normal ничего не создаем, т.к. скрипты из этой папки попадут в сборку LocomotionAsm

И тут мы получаем ошибку…

Assets/Scripts/Editor/MoveForwardEditor.cs(3,22): error CS0246: The type or namespace name `MoveForward' could not be found. Are you missing an assembly reference?

image

Скрипт MoveForwardEditor ругается, что не может найти ссылку на MoveForward. Все правильно в данном случае MoveForward оказался в другой сборке и не доступен. Что бы это исправить нужно сделать следующее

1. Выбрать файл сборки EditorAsm
2. Нажать на +
3. Выбрать файл сборки LocomotionAsm, потому что MoveForward именно там.
4. Из платформ оставить только Editor
5. нажать Apply

image

Теперь ошибка ушла. И давайте посмотрим в папку Library и увидим наши сборки.

image

После сборки проекта мы также увидим эти сборки, кроме EditorAsm, т.к. это скрипт эдитора.

Есть еще одна Важное замечание. Файлы сборки не поддерживают директивы препроцессора, т.к. всегда статичны.

Статья была написана как попытка перевести официальный блог ) Всем спасибо за прочтение статьи. Жду ваших комментариев.
Tags:
Hubs:
+8
Comments12

Articles