Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы и ответы к экзамену.docx
Скачиваний:
29
Добавлен:
21.06.2022
Размер:
16.83 Mб
Скачать

31. Игра в стиле jetpack joyride в Unity 2d. Добавление лазеров в игру. Скрипт для включения, выключения, переключения и вращения лазеров. Настройка параметров этого скрипта.

Добавление лазеров в игру

Шаги, необходимые для создания лазера:

  1. Выберите спрайт laser_on в папке Sprites на панели Project и переместите его в сцену.

  2. Переименуйте laser_on в Иерхархии в laser.

  3. Поставьте в соответствие Sprite Renderer Sorting Layer в Objects.

  4. Добавьте компонент Box Collider 2D.

  5. Активируйте чекбокс Is Trigger в данном компоненте.

  6. Отредактируйте размер коллайдера: X = 0.18, Y = 3.1. Это позволит создать коллайдер в самом лазере, минуя эмиттеры на концах.

  7. Создайте новый скрипт LaserScript и присоедините его к laser.

Скрипт для включения, выключения, переключения и вращения лазеров

Откройте только что созданный скрипт и добавьте следующие переменные:

  1. Лазер может находиться в двух состояниях: включен и выключен. Это характеризуется различными спрайтами.

  2. toggleInterval обозначает интервал времени для перехода лазера между состояниями. rotationSpeed характеризует скорость вращения лазера.

  3. Здесь isLaserOn характеризуют текущее состояние лазера, а timeUntilNextToggle хранит в себе время до следующего изменения состояния.

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

Добавьте следующий код в метод Start() нашего скрипта:

  1. Это установит время, по истечении которого лазер впервые переключится в свое состояние.

  2. Здесь мы сохраняем ссылки на коллайдер и рендерер, так как вам нужно будет настраивать их свойства с течением времени.

Для изменения состояния лазера и его вращения добавьте следующий код в метод Update() нашего скрипта:

  1. Декрементируем время, прошедшее с момента отрисовки последнего кадра.

  2. Если время ожидания состояния подошло к концу — значит необходимо изменить состояния лазера.

  3. Инвертирует состояние лазера.

  4. Активируем/деактивируем коллайдера лазера.

  5. Устанавливаем соответствующий спрайт.

  6. Обновляем значения времени ожидания следующего состояния.

  7. Вращаем лазер.

Настройка параметров этого скрипта

Вернёмся в окно Unity и выберем laser на панели Иерархии. Убедитесь, что компонент скрипта лазера виден. Переместите спрайты laser_on и laser_off на свойства Laser On Sprite и Laser Off Sprite соответственно на панели Инспектора. Установите Rotation Speed значение в 30. Теперь поставьте лазер в позицию (2, 0.25, 0), запустите сцену и убедитесь в корректности работы лазера.

32. Игра в стиле jetpack joyride в Unity 2d. Реализация скрипта, описывающего смерть мыши. Добавление анимаций Fall и Die, переходы между ними, триггер при смерти мыши.

Реализация скрипта, описывающего смерть мыши

Сейчас мышка просто проходит через лазеры, никаких на них не реагируя. Самое время исправить это. Добавьте в MouseController новое поле:

Эта переменная будет хранить текущее значение состояния игрока. Значение true означает, что игрок не будет иметь возможности активировать джетпак, двигаться вперёд или делать что-либо ещё.

Добавьте следующие два метода в MouseController:

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

Теперь, когда мышка мертва, она не должна двигаться вперёд или летать, используя джетпак. Измените метод FixedUpdate() на следующий блок кода, чтобы это реализовать:

Обратите внимание, что jetpackActive теперь всегда false, когда мышка мертва. Это означает, что она не будет иметь возможность получить дополнительную силу для своего Rigidbody. Кроме того, проходя через метод AdjustJetpack() мы тут же выключаем систему частиц. Теперь же, запустив сцену, вы увидите, что мышь, фактически, парализуется, проигрывая анимацию перемещения. Это говорит о том, что нам необходимо добавить анимации падения и смерти мышки.

Добавление анимаций Fall и Die, переходы между ними, триггер при смерти мыши

Выберите mouse на панели Иерархии и откройте окно Animation. Создайте новую анимацию и назовите её die. Сохраните анимацию в папке Animations.

  1. Откройте папку Sprites на панели Project.

  2. Выберите и переместите спрайты mouse_die_0 и mouse_die_1 на таймлайн окна Animation.

  3. Установите количество кадров в значение 8.

Создайте аналогичным образом анимацию fall с соответствующим спрайтом.

После создания анимации необходимо скорректировать переключение анимации нашей мышки в окне Animator. Для этого мы будем использовать специальное состояние анимации, называемое “Any State, которое характеризует любое текущее состояние анимации.

Мы не случайно создали анимации fall и die. Первая вызывается, если мышка погибнет в полёте, после чего должна проиграться анимация её падения на пол. Данная стадия должна пропускаться, если мышка погибла при перемещении на полу. В обоих случаях, в конце должна проиграться вторая анимация.

Для этого мы создадим новый параметр в окне Animator. Нажмите на иконку плюсика, добавьте новый bool-параметр и назовите его isDead.

Далее создайте переход из Any State в fall.

Выберите переход (нажмите левой кнопкой мыши на появившейся стрелке) и на панели Инспектора в секции Conditions добавьте два параметра: isDead и isGrounded. Установите значение первого параметра в true, а второй в false.

Далее создайте новый переход из Any State в die. Выберите данный переход и добавьте те же два параметра: isDead (true), isGrounded (true).

Теперь необходимо программно изменять состояния данных параметров. Для этого добавьте в метод HitByLaser() скрипта MouseController следующую строку:

Таким образом мы изменяем состояние параметра isDead на true.

Запустите сцену и влетите в активированный лазер. Как можно заметить, анимация использует самоповторение, чего быть не должно. Это происходит по той причине, что Any Stateактивирует переход в die в бесконечном цикле, так как наши bool-параметры постоянно true, что и активирует данный переход.

Исправим это, используя Trigger. Этот тип параметров очень схож с bool-параметрами, за исключением того, что такие параметры автоматически сбрасываются после использования.

Откройте окно Animator, добавьте новый trigger-параметр и назовите его dieOnceTrigger. Установите его в активное положение, нажав на круговую кнопку справа от него.

Далее, выберите переход от Any Stateк die и добавьте dieOnceTrigger в секцию Conditions.

Далее откройте папку Animations и выберите анимацию die. В окне инспектора деактивируйте чекбокс Loop Time, дабы отключить самоповторение анимации.