Unity 6.3
0 онлайн 57 гостей 3 в системе
Вход
Программирование в Unity Шаг 6 из 210

Проверка скриптов

Когда вы выбираете ассет скрипта в Project окно, Inspector отображает некоторую базовую информацию о нем, включая имя сборка к которому он принадлежит, и предварительный просмотр содержимого.

Примечание: Хотя Inspector отображает содержимое скрипта, вы не можете редактировать содержимое в окне 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, к которому вы присоединяете компонент скрипта, может иметь собственное уникальное значение для поля.

A public string field editable in the Inspector window.
Открытое строковое поле, редактируемое в окне Inspector.

Имена полей преобразуются в метки окна Inspector в соответствии с правилами, описанными в Преобразование имени поля в метку. Однако эти изменения предназначены исключительно для отображения. Вы всегда должны использовать имя поля в своем коде.

Если в окне Inspector изменить значение Мое имя и нажать кнопку Воспроизвести, сообщение консоли теперь должно содержать введенный текст.

В консоли Unity появляется сообщение об отладке, в котором говорится, что я жив и меня зовут Эрл.
В консоли Unity появляется сообщение об отладке, которое гласит: «Я жив, и меня зовут Эрл».

Открытые и закрытые поля

Все 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 в поле Объект, который следует за.

A public Transform field with a GameObject assigned. Here the script is on the Sphere (currently selected), and the Cube was dragged and dropped from the Hierarchy into the Spheres Object To Follow field
Открытое поле Transform с назначенным GameObject. Здесь скрипт находится на объекте Sphere (сейчас выделен), а Cube был перетащен из окна Hierarchy в поле Объект, за которым следовать поле

Ссылки на объекты по умолчанию

Если вы объявляете открытый Object поля, которые могут быть назначенные в редакторе в вашем скрипте MonoBehaviour, вы можете установить ссылки по умолчанию для этих полей. Поля ссылки по умолчанию видны в инспекторе, когда вы выбираете ассет скрипта в окне Project.

Скрипт MonoBehaviour с тремя полями AudioClip. Ссылки по умолчанию для этих полей показаны без настройки.
Скрипт MonoBehaviour с тремя полями AudioClip. Ссылки по умолчанию для этих полей показаны без настройки.

В примере выше есть три открытых поля аудиоклипов без назначенных ссылок по умолчанию. Каждому полю ссылки 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, когда эти правила не применяются.

Дополнительные ресурсы