Добавить в корзинуПозвонить
Найти в Дзене

Space shooter. Сцена сборки корабля. Часть 1

Неделя была посвящена ковырянию Unity UI. Идея проста, но, как всегда подкапотная работа принесла довольно много сюрпризов. Война со второй камерой. Окно сборки корабля я решил разделить на 3 функциональных части: Итак у нас имеется на экране две модели (собранный корабль и компонент для установки на него). Работаем так. Выбираем из списка компонент, он появляется в своем окне. Дальше можем его вращать приближать, удалять. Чтобы установить его на корабль на компоненте есть соединительные узлы. Надо выбрать один на компоненте, второй на корабле. Дальше жмём кнопку "добавить" и компонент устанавливается на корабль. На сам корабль у меня направлена главная камера, на компонент - вторая камера. С первым понятно, просто подгоняем в нужное место. А вот со второй пришлось поколдовать. За пример взял миникарту. Создал текстуру, на неё кинул изображение с камеры, а саму текстуру положил на raw image. Теперь у меня есть UI панель, а на ней картинка с видеотекстурой, замечательно. Вращение и зум

Неделя была посвящена ковырянию Unity UI.

Идея проста, но, как всегда подкапотная работа принесла довольно много сюрпризов.

Война со второй камерой.

Окно сборки корабля я решил разделить на 3 функциональных части:

  1. Компонент корабля
  2. Сам корабль
  3. Оборудование и материалы

Итак у нас имеется на экране две модели (собранный корабль и компонент для установки на него). Работаем так. Выбираем из списка компонент, он появляется в своем окне. Дальше можем его вращать приближать, удалять. Чтобы установить его на корабль на компоненте есть соединительные узлы. Надо выбрать один на компоненте, второй на корабле. Дальше жмём кнопку "добавить" и компонент устанавливается на корабль.

На сам корабль у меня направлена главная камера, на компонент - вторая камера. С первым понятно, просто подгоняем в нужное место. А вот со второй пришлось поколдовать.

За пример взял миникарту. Создал текстуру, на неё кинул изображение с камеры, а саму текстуру положил на raw image. Теперь у меня есть UI панель, а на ней картинка с видеотекстурой, замечательно.

Вращение и зум сделал быстро при помощи mousedrag и mousescroll (позже переделаю через inputcontroller, чтобы и с мобилы можно было работать). А вот с выделением элементов проблемка.

Кликнуть мышкой по коллайдеру не получится, т.к. у нас картинка с изображением элемента. Единственный вариант делать через raycast. Здесь, ввиду моей квалификации я встал надолго. В итоге отказался от камеры с перспективой (сделал изометрическую). Схема работает так:

  1. Получаем координаты клика мышки по экрану
  2. Вычисляем левый нижний угол (координаты) нашей rawimage. И вычитаем их из координат мышки.
  3. Теперь мы знаем точку, куда мы ткнули на картинке. Можем бросить луч из камеры и получить коллайдер в который он попал.

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

Итак, выделение работает, компонент корабля на месте и все м этим делом можно управлять.

https://dzen.ru/video/watch/6328d4a8a1d324706eb4d144

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