День 25–25.11.20

Ну наконец то! Примерно через полторы недели я закончил курс кинематографии! Изначально я планировал закончить его в прошлую пятницу, но в итоге столкнулся с несколькими замедлениями. Несмотря ни на что, я смог закончить его, наконец, в среду!

Оглядываясь назад на проект, я определенно узнал много новых потрясающих техник, некоторые простые, а некоторые немного сложнее. Начнем с того, что кинематографический аспект единства было потрясающе увидеть и изучить, и это действительно открыло мне перспективу, когда я увидел кат-сцены в играх, и здорово знать, что теперь я могу создавать множество снимков и панорам с камеры.

Также небольшое замечание: аниматор временной шкалы — действительно замечательная функция, и его простота действительно не коррелирует с его мощью. Вы можете не только записывать определенные кадры камеры, постепенное появление и исчезновение, управлять игровыми объектами во время заставок, но, как показал нам Ал, временную шкалу можно использовать для создания практически невозможного сценария для таких вещей, как движение врага или зигзагообразное движение. огненный шар, который можно использовать в игре. Было действительно здорово видеть, что вам не нужно быть каким-то сумасшедшим математическим гением, чтобы создавать такие функции. Это определенно то, что нужно добавить в мой арсенал инструментов, и я, безусловно, буду использовать его намного чаще в будущем.

Вернемся к тому, чему я научился в своем путешествии по кино и стелс-курсу. Когда дело дошло до самой игры, мне действительно стало удобно использовать триггеры игровых объектов. Какими бы простыми ни были эти по сути пустые игровые объекты, их можно очень творчески использовать для создания потрясающих функций. Одним из основных применений триггеров игровых объектов было указание игре, когда менять камеры. Еще одним интересным применением была активация звуковых клипов по всему уровню. Одним из моих любимых способов использования игровых объектов было создание линий обзора для наших охранников. Это действительно здорово думать о всех различных способах, которыми я мог бы теперь что-то делать, например, в космическом шутере, вместо функции расстояния для моего вражеского заряда, я мог бы также создать дочерний игровой объект, чтобы определить, находится ли мой игрок в указанном месте. диапазон для заряда. Теперь я уверен, что первый метод намного эффективнее, чем создание множества игровых объектов, но здорово знать, что я могу создать одну и ту же функцию несколькими разными способами.

Следующим действительно замечательным инструментом, который я изучил, является использование raycasting. Raycasting — такой мощный инструмент, и я полагаю, что он в значительной степени используется в любой игре-шутере, чтобы определить, когда враг или игрок поражен выстрелом. В этой игре мы использовали raycasting, чтобы перемещать наших игроков, а также бросать монету, чтобы отвлечь охранников. Это определенно функция, с которой я хотел бы стать сильнее и поиграть с ней больше, поскольку я уверен, что есть много творческих способов использования ray cast.

В последний день этого проекта я познакомился с двумя новыми техниками написания сценариев. Первый был шаблоном Singleton, а второй — асинхронной операцией.

Шаблон Singleton — очень интересный фрагмент кода, который можно добавить в любой скрипт, на который нужно много ссылаться в нескольких скриптах. Это делает ссылки и вызовы функций внутри скрипта чрезвычайно простыми. В приведенном выше сценарии вы можете увидеть, как используются обе стороны синглтона. Все, что выше функции обновления, — это настройка синглтона, а обновление, код «AudioManager.Instance.PlayMusic();» ссылается на синглтон, созданный в сценарии AudioManager.

Асинхронная операция очень полезна для таких вещей, как загрузочные экраны. Как вы можете видеть в скрипте выше, «операция» может использоваться для отслеживания хода экрана загрузки от перехода от главного меню к основной сцене в игре. На экране загрузки уровень заполнения индикатора выполнения будет визуально отображать процент выполнения операции. Также очень важно, что выход return new WaitForEndOfFrame(); гарантирует, что цикл while не приведет к сбою программы, и позволит циклу while «дышать».