Проверка скриптов
Когда вы выбираете ассет скрипта в Project окно, Inspector отображает некоторую базовую информацию о нем, включая имя сборка к которому он принадлежит, и предварительный просмотр содержимого.
Примечание: Хотя Inspector отображает содержимое скрипта, вы не можете редактировать содержимое в окне Inspector.
Скрипт Inspector также отображает две кнопки, Открыть и Приказ об исполнении.
Открыть выполняет ту же функцию, что и двойной щелчок на скрипте в окне Project, открывая скрипт в текущем настроенном Внешнем Редакторе Скриптов. Вы можете настроить, какой внешний редактор Unity будет использоваться для открытия ваших скриптов в разделе Внешние инструменты окна Настройки.
Кнопка Порядок Выполнения открывает раздел Порядок Выполнения Скрипта окна Настройки Project, где вы можете настроить порядок, в котором Unity выполняет ваши скрипты.
Компоненты скрипта в окне Inspector
Любой MonoBehaviour скрипт может быть использован как компонент, что означает:
- Вы можете прикрепить скрипт к GameObjects
- Вы можете изменить свойства и значения скрипта в окне Inspector
В примере кода ниже объявлено открытое поле с именем myName. Когда вы добавляете этот скрипт в GameObject в вашей сцене, поле становится видимым в Inspector окно как поле с меткой Моё имяЗначение по умолчанию none объявленный в скрипте, становится значением по умолчанию в Inspector окно, которое можно изменить, введя в поле соответствующий текст.
using UnityEngine;
using System.Collections;
public class MainPlayer : MonoBehaviour
{
public string myName = "none";
// Use this for initialization
void Start ()
{
Debug.Log("I am alive and my name is " + myName);
}
}
Каждый GameObject, к которому вы присоединяете компонент скрипта, может иметь собственное уникальное значение для поля.
Имена полей преобразуются в метки окна Inspector в соответствии с правилами, описанными в Преобразование имени поля в метку. Однако эти изменения предназначены исключительно для отображения. Вы всегда должны использовать имя поля в своем коде.
Если в окне Inspector изменить значение Мое имя и нажать кнопку Воспроизвести, сообщение консоли теперь должно содержать введенный текст.
Открытые и закрытые поля
Все public поля редактируются в Inspector окне по умолчанию. Чтобы открытая переменная не отображалась в Inspector окно, добавить HideInInspector ему приписать. private поле редактируемое в Inspector окно, добавить SerializeField приписать ему.
Примечание: Вы можете изменить значения полей скрипта в Редакторе во время запуска в режиме воспроизведения. Это позволяет вам увидеть эффект изменений непосредственно без необходимости остановки и перезапуска. Однако, когда вы выходите из режима воспроизведения, значения полей возвращаются к тем, что были до входа в режим воспроизведения.
Поля ссылок на объекты
В дополнение к простым встроенным C# типам, таким как bool, stringи int, вы также можете сделать любое поле, тип которого наследуется от UnityEngine.Object, редактируемым в окне Inspector. Это включает в себя все встроенные типы компонентов (такие как Transform, AudioSource, Camera, Свет), ваши собственные MonoBehaviour типы скриптов и многие типы ассетов.
Это позволяет задействовать систему перетаскивания Unity Editor в ваших собственных скриптовых компонентах. Например, если вы создадите открытый Transform поле в вашем скрипте и добавить его к одному GameObject, затем вы можете перетащить другой GameObject в это поле в Inspector окно, чтобы установить ссылку на это GameObject’s Transform компонент, к которому вы можете получить доступ во время выполнения в вашем скрипте.
Например, этот скрипт Follow заставляет один GameObject следовать за другим:
using UnityEngine;
public class Follow : MonoBehaviour
{
public Transform objectToFollow;
public float followSpeed = 1;
void Update()
{
// calculate the distance between this object and the target object
// and move a small portion of that distance each frame:
var delta = objectToFollow.position - transform.position;
transform.position += delta * Time.deltaTime * followSpeed;
}
}
У скрипта есть открытое поле типа Transform который появляется в Редакторе как назначаемое поле. Вы можете перетащить другой GameObject из окна Hierarchy в это поле, и Редактор назначит ссылку на компонент Transform, прикрепленный к этому оставленному GameObject.
На скриншоте ниже скрипт помещен на сферу GameObject, а куб перетаскивается из Hierarchy в поле Объект, который следует за.
Ссылки на объекты по умолчанию
Если вы объявляете открытый Object поля, которые могут быть назначенные в редакторе в вашем скрипте MonoBehaviour, вы можете установить ссылки по умолчанию для этих полей. Поля ссылки по умолчанию видны в инспекторе, когда вы выбираете ассет скрипта в окне Project.
В примере выше есть три открытых поля аудиоклипов без назначенных ссылок по умолчанию. Каждому полю ссылки AudioClip по умолчанию можно назначить свой аудиоклип.
Если вы назначаете ссылки по умолчанию, они применяются, когда вы добавляете MonoBehaviour в качестве компонента в GameObject, или когда вы сбросаете существующий экземпляр MonoBehaviour на GameObject до его значений по умолчанию.
Примечание: Нет постоянной связи между ссылками на экземплярах MonoBehaviour на GameObjects и ссылками по умолчанию. Это означает, что если вы измените ссылки по умолчанию, они не будут автоматически обновляться на существующем GameObjects.
Другие виды Инспектор-редактируемые поля которые не наследуют от UnityEngine.Object (например, открытые поля string или int) не имеют полей значений по умолчанию в Inspector. Вместо этого они берут значения по умолчанию из самого скрипта.
Исключения нулевых ссылок
Unity вызывает NullReferenceException, если вы забыли инициализировать переменные, которые должны быть инициализованы в окне Inspector. Вы можете обрабатывать это с блоками try / catch, как показано в следующем примере:
using UnityEngine;
using System;
using System.Collections;
public class Example2 : MonoBehaviour {
public Light myLight; // set in the inspector
void Start () {
try {
myLight.color = Color.yellow;
}
catch (NullReferenceException ex) {
Debug.Log("myLight was not set in the inspector");
}
}
}
В этом примере кода переменная, называемая myLight, является Light, которую нужно установить в окне Inspector. Если эта переменная не установлена, то по умолчанию она является null.
Попытка изменить цвет света в блоке try вызывает NullReferenceException. Если это происходит, код блока catch отображает сообщение, напоминающее вам установить Свет в блоке Inspector.
Преобразование имени поля в метку
Unity преобразует имена полей C# в метки в окне Inspector в соответствии с набором правил. Например, имена переменных в вышеприведенных примерах были преобразованы из myName в Моё имя, и из objectToFollow в Объект, который следует. Правила следующие:
- Первая буква с прописной
- Добавить пробел между строчными и прописными символами
- Добавить пробел между акронимом и символом с заглавной буквы в начале следующего слова
- Удалить префикс
m_ - Удалить префикс
k - Удалить префикс
_
Существуют некоторые особые случаи, такие как iPad или x64, когда эти правила не применяются.