Unity3D: Основы использования скриптов для новичков: Подробнее о функциях

Функции Update() и Start()

Имеются функции, которые предоставляет Unity, и которые запускают скрипты на выполнение, поэтому мы начнем наше обучение с них. Самая распространенная функция, предоставляемая Unity, — это функция Update(). Каждый раз, когда вы будете создавать новый скрипт, то увидите данную функцию автоматически напечатанную для вас. Следовательно, эта функция должна быть слишком важной. Посмотрите.

Создайте новый скрипт

В меню выберите Assets | Create | JavaScript.

Почему JavaScript? Существует много обсуждений на форуме Unity о версии JavaScript, которую Unity использует для работы скриптов. Многие предпочитают называть его UnityScript, поскольку на самом деле это ненастоящий JavaScript, а просто очень похожий. Я тоже предпочитаю использовать выражение UnityScript.

Обратите внимание на то, что выбранным пунктом меню был элемент Assets. Не забывайте, когда скрипты прикреплены к игровым объектам, то они магически превращаются в компонент этого игрового объекта. Поищите слово «Asset» в словаре, это в основном «полезная или ценная вещь или свойство». Конечно же, скрипт сделает игровой объект более полезным, мы надеемся.

Создается новый скрипт с именем NewBehaviourScript

Этот новый файл скрипта создается в окне «Project». По умолчанию ему дается имя NewBehaviourScript.

Измените его имя

Выберите файл и нажмите кнопку Enter, чтобы отредактировать его имя. Файлам скрипта следует задавать имена, которые описывают то, что делают скрипты. Поскольку это функции для обучения, то я даю файлу имя StudyFunctions. Снова нажмите Enter, чтобы сохранить новое имя.

Переместите скрипт в папку Scripts

  1. Просто перетащите файл в папку Scripts.
  2. Там находится мой скрипт.

Взгляните на окно Inspector

Во время того, как скрипт выбран (подсвечен) в окне Project, окно Inspector отображает содержимое скрипта.

  1. Имеется функция Update(), которая автоматически вставляется.
  2. Нажмите кнопку Edit, чтобы открыть файл в редакторе скриптов.

Update(): функция «сделай это опять»

Почему именно эта функция Update() автоматически вставляется в новые скрипты?

Unity автоматически вызывает эту функцию с каждым кадром обновления, что и заставляет ваш код выполняться. ( Описание функции Update() в справочнике)

По мере изучения справочного руководства по скриптам, вы заметите, что подавляющее большинство примеров кода заключено в функцию Update().

Start(): функция «сделай это только один раз»

Еще одна очень распространенная функция, предоставляемая Unity, — это функция Start(). Эта функция вызывается только один раз.

Для любого скрипта, который является компонентом игрового объекта и имеет функцию Start() в нем, Unity автоматически вызывает функцию Start() в случае, когда игровой объект впервые используется в сцене.

Имена функций

Я наконец-то подошел к тому, что же такое функции, и к тому, зачем же их необходимо использовать (ссылка).

То, что я сейчас покажу — это то, как создавать функции, объясняя детали.

Объявление функций

Каждая функция, которую вы или Unity хотите использовать в скрипте, должна быть объявлена. Что это значит? Объявление указывает Unity то, что вы создали конкретный набор запрограммированных шагов и дали всей группе имя. После этого Unity будет знать, что означает этот блок, когда вы или Unity вызовет его для использования в скрипте.

Давайте посмотрим на функцию Start(). Это функция, которую система Unity вызовет сама, но не вы. Тем не менее, функция все еще зависит от вас, от того, какие запрограммированные шаги будут находиться в функции.

  1. Справа перед Start() расположено ключевое слово function. Помещая ключевое слово function, мы сообщаем Unity о том, что хотим создать новую функцию в данном скрипте.
  2. Сразу же после слова Start следуют круглые скобки, (). Какова цель этих круглых скобок? Помимо того, что они являются частью имени функции, это также способ передачи данных в код функции.

Я так и вижу, как вы чешите голову, удивляясь, что же это означает. Кроме всего прочего, функция Start() не имеет ничего между круглыми скобками, так какие тогда данные передаются функции? На самом деле никакие в данном случае, но не беспокойтесь, я объясню все в последующих этапах.

  1. Это начало фигурной скобки,
  2. Это окончание фигурной скобки. Примечание: объявления функций не заканчивается точкой с запятой. Компилятор уже понимает, что последняя фигурная скобка является окончанием.
  3. Все, что между такими фигурными скобками (3 и 4) является телом функции, код этой функции будет выполняться при вызове функции Start() с целью исполнения своей работы.

Примечание: Немного личной информации. Когда я только начинал изучать функции, много месяцев тому назад, то у меня был вал времени, чтобы попытаться понять в этом материале. Я просто не мог понять, что происходит. Я понимал, что функции были контейнерами повторного использования кода, что было довольно легко. Между тем, вызывать функцию и передавать данные в функцию не получалось, в первую очередь потому что «авторы» пишут книги и не объясняют подробно обо всем этом. Вот почему я и пишу эти уроки, так как я помню ту агонию, через которую прошел, пытаясь вникнуть во весь подобный материал.

Следующий шаг погрузит в заморозку сознания, как было у меня.

Заторможенность в понимании функций

  1. Это объявление функции, которую я создал и назвал WhereAreYou(). Как видите, она имеет все части, описанные в предыдущем шаге.
  2. Что-то дополнительное в этой функции. Справа между округлыми скобками находится специальная переменная, называемая параметром. Я назвал эту переменную anyVariable: String. Такое описание сообщает Unity о том, что я хочу послать некоторые строковые данные в функцию с тем, чтобы код функции смог сделать что-то с этими данными.

Функции могут иметь от нуля до любого другого количества параметров, которые вам нужны, чтобы передать данные по вашему желанию в функцию. Каждый параметр разделен точкой с запятой. Функция Start() не имеет никаких параметров, поэтому ничего не передается в функцию. Функция WhereAreYou() имеет один параметр.

Вот та часть, которая запутала меня на долгое время.

Глядя на параметр anyVariable: String, человек, просто изучающий, мог бы взглянуть на него и сказать: «Хорошо, будут переданы некоторые данные в функции при помощи переменной с именем anyVariable, а тип данных переменной строковой.»

Однако, когда я смотрю на функцию WhereAreYou() , то в действительности функция будет вызываться так:

  1. WhereAreYou(location);
  2. WhereAreYou(noClue);

Ну и что такое происходит? Функция в пункте 3 имеет переменную с именем location в качестве параметра, а функция в пункте 4 имеет переменную с именем noClue в качестве параметра. И как это работает? Ни location , ни noClue не находятся в разделе объявления функций.

После долгого и упорного поиска в книгах (без какого-либо google тогда), я так и не нашел однозначного ответа. Никто не объяснил этого. Ответ был достигнут путем проб и ошибок, через путаницу в коде, что в итоге принесло свои плоды. В данном примере, переменной anyVariable — просто назначается значение из переменной location во время первого вызова, а параметр noClue назначается тогда, когда функция вызывается во второй раз.

Другими словами, все происходит за кадром:

anyVariable = location;

а затем:

anyVariable = noClue;

Значение в переменной location копируется в переменную anyVariable. Тоже самое с noClue. Затем переменная anyVariable используется в функции.

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

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

Вызов и последовательность работы функций

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

Давайте взглянем на вызов функции

  1. В функции Start() имеется два вызова функции WhereAreYou();
  2. Это именно то, что будет делать функция WhereAreYou()Debug.Log(), другая функция, обеспечит вывод на консоль Unity.

Схема работы скрипта

На левой стороне находится функция Start(), выполняющая свои задачи; На правой стороне расположена функция WhereAreYou(), выполняющая свой код.

  1. В функции Start() имеются два вызова функции WhereAreYou();
  2. Это первый раз, когда вызывается и выполняется функция WhereAreYou().
  3. Функция Debug.log() вызывается, чтобы обеспечит вывод консоли;
  4. Это второй раз, когда вызывается и выполняется функция WhereAreYou();
  5. Debug.Log() вызывается для того, чтобы обеспечить вывод консоли снова;

Вывод консоли

  1. Результат первого вызова функции WhereAreYou();
  2. Результат второго вызова функции WhereAreYou();

Чтобы этот скрипт заработал, он должен быть прикреплен к игровому объекту. Я добавил пустой игровой объект в сцену и прикрепил скрипт. Нажал на Play. Запустился вывод.

Что происходит, если используется функция Update()?

Я непринужденно переместился из функции Start() в функцию Update().

Результат использования функции Update()

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

Источник: httpssss://bim.wikispaces.com/file/view/UnityScript_Basics_for_Noobs.pdf

Смотрите также:

Unity3D: Основы использования скриптов для новичков: Преимущественно для новичков


Unity3D: Основы использования скриптов для новичков: Преимущественно для новичков


Unity3D: Основы использования скриптов для новичков: Подробнее о переменных


Unity3D: Основы использования скриптов для новичков: Решения, решения, всегда приходится принимать решения


Unity3D: Основы использования скриптов для новичков: Синтаксис точки: взаимодействие компонентов


Unity3D: Основы использования скриптов для новичков: Назначение при помощи инспектора

Комментариев: 2 на “Unity3D: Основы использования скриптов для новичков: Подробнее о функциях

  1. чётко, понятно, доходчиво,
    даже самый непонятливый ,как я ,ито поймёт,
    отличный материал для новичков!
    как говорится — ЭтаПять!

    1. Спасибо за Вашу оценку! Делайте пожалуйста репосты и делитесь статьями в соцсетях, чтобы помочь продвижению сайта.

Комментировать

Почта не публикуется.Обязательные поля отмечены *