Всем привет!
Делаю миникарту в космосе по типу точки - корабли, линии от них - расстояние по высоте от корабля игрока.
Вопрос в том, как сделать это наиболее оптимально.
Первый вариант, который мне пришел в голову: создать камеру над персонажем, которая будет смотреть на отдельный слой, где будут размещены метки кораблей.
В принципе этот вариант меня сейчас устраивает, но возникают некоторые вопросы:
Создается 1 меш (сфера) для каждого корабля. Это дополнительный 1 DrawCall на все сразу - сферы одинаковые, а значит копии попадут в batch (проверил).
А вот линии, которые показывают расстояние по высоте относительно игрока можно генерировать
а) через GUI - затратно по DrawCall-ам - каждая линия +1
б) создавая меши-"линии" в пространстве - проще в реализации, затраты по DrawCall-ам вроде теже, но по фпс этот вариант должен проигрывать.
в) мб через партиклы? ведь одна система партиклов будет съедать 1 дравкол на все выпущенные частицы! Но как управлять длиной (растянотостью) каждого отдельного партикла? А если это и возможно, то как избавится от мерцания, когда снят флажок Simulate In World Space и Particle Emitter перемещается из кода в нужные позиции где вызываем Emit() ?
Есть и другой вариант миникарты: полностью сделать через GUI. Но это здорово увеличит DrawCalls Чтобы такого не было я пробовал создавать текстуру, ставить на ней точки (корабли) и выводить на экран одним Draw. Все вроде бы замечательно, но это не работает - появляются какие-то полосы и т.п.! До тех пор, пока я не стал заливать созданную текстуру прозрачными пикселями, а потом уже ставить на ней другие точки.
Здесь вызывает недоумение отсутствие таких функций, как копирование куска одной текстуры в другую того же формата и рисование на текстуре, к примеру, линий - одной функцией. Приходится каждый раз заново заполнять новую текстуру прозрачными пикселями. Это занимает кучу времени и фпс падает просто ужасно! Зато только 1 DrawCall)
Пробовал рисовать это на текстуру Plane, а оттуда на камеру, но это ничем не отличается от предыдущего варианта. Разве что немного меньше нагрузка - ведь это не нужно делать все в OnGUI, что меньше замедляет рендеринг одного кадра.
Попробовал использовать GL, пока просто создавал 500 квадратов в OnPostRender. DrawCall-ов 500, но фпс падает не сильно! Возникает вопрос, стоит ли бороться за количество дравколлов или лучше заниматься их "качеством"? Ведь судя по всему их может быть и 2000 при нормальном фпс около 60-и.
Кстати, радар из Islands я видел, там примерно та же схема, что в самом первом варианте, но с небольшими отличиями. Да, я видел, что там камера радара не висит над игроком, а перемещается над Plane-ом с текстурой ландшафта, но это все-равно напоминает мне первый вариант из тех, что я написал.
Посоветуйте мне как лучше делать такого рода миникарту...
Заранее спасибо!
Добавлено:
Может я что-то пропустил и текстуры можно копировать через Instantiate?