Индикаторы на экране важная часть наверное каждой игры, принимайте это как стандарт игровой индустрии, если мы говорим о ААА играх то вам не обходима эта механика. Индикатор на экране обозначают игрока о возможных действиях которые ему доступны, в первую очередь оповестить его о взаемодействии с игровым обьектом, так же может быть и если игрок потерялся в игровой среде , обозначение врагов итд.
Возьмем к примеру такие игры как
Uncharted
Tomb Rider Lara Croft
Last of Us
Прежде чем приступать к разработке , мое иследование было на этих 3 играх
Uncharted 3: Drake's Deception
Shadow of the Tomb Rider
Last of Us 2
В своем проекте я разработал похожую механику, давайте взглянем.
Demonstration: Indicator on the screen
У Обьекта есть точка в пространстве, для общего понимания я обозначил ее красной, это центр координат обьекта. Я отказался от расчета дистанции и воспользовался тригерами, маленькая возможность для оптимизации. У каждого тригера я создал событие и которое вызывает нам нужное.
При инициализации сцены, обьект подгружает Дата контейнер (Scriptable Object) который в свою очередь проверяет какой устройство подключено, Dualshock, Oculus Touch, XBox геймпад не важно, после движок загружает спрайт (холст) с нужными клавишами которые и сохраняются в переменные
Давайте познакомимся с моей реализацией и разберем по подробнее
Всего есть 3 - зоны, при которых индекатор появляется.
Зона 1 - Игрок находится за пределами тригера, если игрок пересечет ее появится индикатор, я использовал линейную интерполяцию, и передал туда цвет используя сопрограмму. После чего идет проверка если игрок находится в этой зоне, если да то мы возвращаем Vector3 точку мирового пространства, созданная путем преобразования точки пространства экрана на заданном расстоянии z от плоскости камеры. Вот эта функция Camera.ScreenToWorldPoint она преобразовывает точку из экранного пространства в мировое пространство, где мировое пространство определяется как система координат на самом верху иерархии вашей игры. Координаты мирового пространства по-прежнему могут быть рассчитаны, даже если они предоставлены как внеэкранные координаты, например, для создания экземпляра внеэкранного объекта рядом с определенным углом экрана.
Зона 2 - Игрок находится за пределами Зоны 2 если игрок пересечет ее появится индикатор нужной кнопки которую нужно нажать, здесь таже интерполяция в деле, я называю эту зону "Зона Взаимодействия" так как мы показываем подсказки или иконки для игрока. Если игрок выйдет с зоны 2 иконка клавиши исчезнет.
Зона 3 - Игрок находится за пределами Зоны 3, если игрок пересечет ее исчезнет индикатор и индикатор кнопки. Я это зделал для того чтобы небыло визуального шума на экране, если игрок близко к обьекту мы отключаем все индикаторы.
Implementation theory
Comentarios