Хитрости программирования на Unity

Когда дело доходит до программирования в Unity, существует множество полезных ключевых слов и команд programming, позволяющих улучшить рабочий процесс в редакторе и ускорить процесс разработки.

Некоторые ключевые слова предназначены для отладки, а другие предназначены для отделения логики редактора от логики сценариев.

1. '[SerializeField]' Атрибут

По умолчанию Unity скрывает частные переменные от инспектора, но если добавить перед ними атрибут '[SerializeField]', они станут настраиваемыми в инспекторе, сохраняя при этом недоступные из других скриптов.

[SerializeField]
private int myPrivateVariable;

2. '[HideInInspector]' и '[System.NonSerialized]' атрибуты

Атрибуты '[HideInInspector]' и '[System.NonSerialized]' имеют схожую функцию — скрыть общедоступные переменные от инспектора, однако они немного отличаются с точки зрения сериализации.

Разница между '[HideInInspector]' и '[System.NonSerialized]' заключается в том, что '[HideInInspector]' просто скроет переменную от инспектора, однако Unity продолжит ее сериализацию (это означает, что значение по умолчанию может отличаться от того, которое указано в коде), '[System.NonSerialized]', с другой стороны, не только скроет переменную от инспектора, но также подаст сигнал Unity не сериализовать ее (это означает, что значение по умолчанию будет сбрасываться между сеансами на значение, указанное в коде).

[HideInInspector]
public int myInternalVariable = 0; //Will always be 0 after the first initialization, so if you decide to change the value in the script, it may not always reflect in the Editor. Often used to remove clutter from the inspector.

[System.NonSerialized]
public int myNonSerializedVariable = 1; //The initial value will always be 1, or whatever value is set. Often used to mimic a private variable, while keeping it accessible from within other scripts.

3. '[ExecuteAlways]' Атрибут

'[ExecuteAlways]' заставляет скрипт выполняться в режиме редактирования и режиме редактирования Prefab, даже когда игра не запущена. Это может быть полезно для целей тестирования и отладки.

Атрибут добавляется перед объявлением класса:

[ExecuteAlways]
public class MyScript : MonoBehaviour {
    // ...
}

4. 'Debug.Break()'

'Debug.Break()' делает паузу редактор.

Эта функция полезна, когда вы хотите проверить определенные значения в инспекторе и не можете приостановить его вручную.

void Update() {
    if (someCondition) {
        Debug.Break();
    }
}

5. '[Range]' Атрибут

Атрибут '[Range]' позволяет создать в редакторе ползунок для общедоступной переменной типа float или int, что может быть полезно для настройки значений на ходу, более удобным для пользователя способом. Просто укажите минимальные и максимальные значения, например:

[Range(0f, 1f)]
public float myFloatVariable;

Прокомментируйте ниже свои любимые советы и рекомендации по программированию в Unity.

Рекомендуемые статьи
Список полезных ключевых слов Unity в C#
Введение в язык сценариев Unity C#
Понимание компонентной архитектуры Unity
Создание контроллера турели в Unity
Вращение на месте в Unity
Как создать шейдер
Как стать лучшим программистом в Unity