Научитесь настраивать и использовать Coroutine в кодовой базе Unity.

Сопрограммы в Unity позволяют использовать определенное время, прежде чем продолжить.

Давайте посмотрим на это так. Если бы я хотел создавать врага каждые несколько секунд, я бы использовал для этого сопрограмму.

Посмотрите, как его настроить.

Во-первых, нам нужно определить метод типа IEnumerator. Это тип коллекции, который помещает код в структуру типа последовательности событий.

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

Давайте посмотрим на код. Сначала я настроил новое частное сериализованное поле типа GameObject для вражеского префаба.

Далее я настрою метод IEnumerator и назову его SpawnRoutine.

Красные закорючки внизу говорят мне, что чего-то не хватает. В сообщении об ошибке говорится, что не все пути кода возвращают значение. Мы исправим это, когда добавим команду yield return.

Команда yield return устанавливает для нас последовательность событий. Например, если я использовал yield return null, номер 1 ошибка будет устранена, а номер 2 IEnumerator будет ждать один кадр, а затем запускать код под ним.

Однако мы хотим, чтобы сопрограмма запускалась каждые несколько секунд. Мы используем метод yield return new WaitForSeconds() для выполнения этой задачи.

Отлично, теперь мы можем подождать определенное количество секунд перед запуском. Но это запустит код только один раз. Теперь нам нужно реализовать то, что называется циклом while.

Циклы while, как следует из названия, зацикливают фрагмент кода, пока выполняется какое-то условие. Если бы, например, мы хотели запускать появление этого врага только 5 раз, мы бы сказали что-то вроде того, что пока это происходит менее 5 раз, мы будем вызывать нашего врага каждые 5 секунд.

В коде:

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

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

Некоторыми полезными примерами бесконечных циклов могут быть Unity. Сама программа не закрывается автоматически, говоря, что все работает правильно, пока вы сами ее не закроете. Это связано с тем, что выполняется бесконечный цикл, гарантирующий, что программа остается открытой.

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

Для этого мы настроим наш цикл следующим образом:

Эта строка кода говорит, что пока это правда, мы хотим подождать 5 секунд, а затем запустить наш код.

Это бесконечно, потому что правда никогда не превратится в ложь сама по себе. Таким образом, эта петля никогда не разорвется.

Теперь, чтобы добавить нашего врага, мы создадим экземпляр нашего сборного игрового объекта врага со случайным местом появления:

И основа заложена. Осталось только выяснить, как на самом деле вызвать этот метод.

В Unity есть встроенный метод StartCoroutine(), который принимает в качестве параметра либо имя сопрограммы, либо вызов сопрограммы. Поскольку мы хотим, чтобы это продолжалось на протяжении всего жизненного цикла игры, мы поместим это в метод start нашего скрипта Spawn Manager.

Свяжитесь со мной в LinkedIn и следите за новостями!