Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Как рисовать графики в Unity?

Как рисовать графики в Unity?

Страницы: 1 2 Следующая »
MSA2Пользовательwww13 сен. 20186:23#0
Всем доброго времени суток!

У меня есть необходимость выводить информацию в виде графика как в обычном мониторе ресурсов из Виндовс.
Порывшись в документации по Unity и поэкспериментировав, я почти нашёл решение, но оно не всегда работает корректно.
Для отрисовки графика я использовал стандартный инструмент Line Renderer, который рисует в 3D-пространстве,
поэтому я просто навесил его на стандартный объект FPC и установил прямо пред камерой. Координату Z не использую,
рисуют просто плоский график. Всё бы хорошо, но при различных разрешениях экрана Line Renderer, конечно,
не стыкуется по масштабу с элементами интерфейса из Canvas'a. Получается вот такая ерунда:

+ Показать

Никаких способов сделать из  Line Renderer двумерный объект и повесить на канвас я не нашёл ни в документации,
ни в инете. Понятно, что  Line Renderer создан для решения несколько иных задач, но всё же хотелось бы прикрутить
его к канвасу и не заморачиваться написанием очередного пухлого скрипта, который надо делать либо через,
графическое API с его библиотеками, что потребует немало времени на изучение этого специфического функционала,
либо мутить костыли из массива панелек на канвасе... Оба способа мне кажутся дурацкими.

В ассетсторе найти что-либо под эти задачи не удалось. Возможно, надо получше знать английский и задавать
правильные вопросы на буржуинском. В общем очередной досадный тупичок.

Подскажите, кто знает, как можно решить такую задачу без лишних сложностей.

Правка: 13 сен. 2018 6:23

MiraПостоялецwww13 сен. 20187:38#1
Системой частиц ктото рисовал точки графика
Еще можно тупо в массив рисовать че угодно, а потом делать updatetexture. Или даже через setpixel (он вроде всеравно через update работает)
UncleMikeПостоялецwww13 сен. 201811:01#2
Вообще то в асетах наверняка можно найти. Но можно и самому за час максимум сделать свой класс по отрисовке графика из отрезков прямых из Image. В начале каждого отрезка можно добавить кружок для плавности кривой графика в точках перелома.
PS. Как же вы не любите пошевелить мозгами...)
EvilSpiritПостоялецwww13 сен. 201814:00#3
Кстати, мозгами и гуглом сегодня проще шевелить, чем идти писать на форумах.
EvilSpiritПостоялецwww13 сен. 201814:05#4
А если по теме - брал такой, работало, да еще и подпивать можно (для красоты)
https://bitbucket.org/UnityUIExtensions/unity-ui-extensions/wiki/… ILineRenderer
MSA2Пользовательwww13 сен. 201816:08#5
EvilSpirit
Спасибо, скрипт хорош, но у меня нет бюджета на покупку столь мелких фич, которых даже для простого геймплея нужны десятки. Были бы деньги - я бы не парился. Единственное что точно куплю - шейдеры от мармосет, которые стоят 100 баксов
UncleMikeПостоялецwww13 сен. 201819:31#6
MSA2
Если сделаете краткое ТЗ с внешними методами для построения графиков, то возможно я напишу вам класс и сделаю префаб для построения графиков в Юнити UI.  Потом можно будет попробовать выложить это в  ассет стор )))
MSA2Пользовательwww13 сен. 201821:21#7
Ээээ
хорошо, через часок напишу что к чему
endeavour_prПостоялецwww13 сен. 201822:28#8
Меня эти разрешения тоже жесть как напрягают, я неосилил канвасы все эти якоря и танцы с бубнами вокруг них.У меня они постоянно глючат.

А зачем ему канвасится если сцена уже отмасштабирована под разрешение ?
Может быть можно через вьюв ту ворлд позиции и отмасштабировать лайнрендерер ?
или канвас отканвасить в ворлдспейсе ? или я бред несу ? Там у канваса есть настройки в какой спейс его канвасить ?

MSA2Пользовательwww13 сен. 201823:14#9
endeavour_pr
Мировые координаты не позволяют менять положение объекта с LineRenderer, хотя я не пробовал через сами координаты точки рисовать, может они и появятся в канвасе
MSA2Пользовательwww13 сен. 201823:26#10
UncleMike
Я поразмыслил над необходимым функционалом для вывода конкретно моего графика.
Всё сводится к элементарному построению ломанной линии, с заданной толщиной.
Оригинальный LineRenderer идеально подходит для этого, проблема только в невозможности
закрепления его в абстрактном плоском пространстве канваса, со всеми переформатированиями
под произвольное разрешение.

Поскольку тут всё довольно близко к железу и нет никаких высокоуровневых абстракций,
можно идти тем же путём, что и в оригинальном LineRenderer - в двумерном массиве хранятся
значения необходимого количества вершин. Скрипт просто рисует линии. Полезно
регулировать скруглённость этих вершин, ну и все прочие базовые настройки из оригинала.

Если бы этот скрипт открывался в MonoDevelop, я бы просто его переделал - это было бы
быстро и просто. Я так контроллёр игрока переделал, вставив туда обработку типа
поверхности под игроком, и вывода соответствующей озвучки шагов.

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

MSA2Пользовательwww13 сен. 201823:34#11
endeavour_pr
Рисоваться точки рисуются, так что, возможно, будет работать как есть. Пробую

===
p.s. Через значения координат не работает, получается ерунда

Правка: 14 сен. 2018 0:25

UncleMikeПостоялецwww14 сен. 20181:22#12
MSA2
Вот сделал простенький проектик с классом и примером сцены - https://drive.google.com/open?id=1CN9FaJQWp-yLw6Ug8WSDD_r5BqZLbDG-
Если для твоих условий надо что то подправить, то обращайся, а может и сам сможешь доработать.
MSA2Пользовательwww14 сен. 20182:31#13
UncleMike
Да, спасибо. Получилось почти решение задачи. Хотя я и не сторонник таких способов, предпочёл бы графическое API.
Однако работает пока не совсем корректно:
+ Показать

Я даже знаю почему - здесь картинка с точкой скейлится под углом, но при этом не корректируется толщина линии,
которая должна быть, ведь при небольших значениях толщины "лесенки" визуально будут уменьшать толщину
получающейся линии. При высоком значении толщины в ваших примерах это незаметно, но мне необходимы
довольно тонкие линии, как в картинке из темы. Там будет ещё куча тонких линий в дизайне этой шкалы
и прочих показателей. Или даже придётся этот монитор вставить в смартфон, который является
важной частью геймплея и было бы довольно логичным его прикрутить именно туда.
А там элементы ещё миниатюрней, причём ещё и скейлятся канвасом.

Вы можете всё тоже самое сделать соответствующими командами, а не картинками?
Тогда все эти сложности снимутся автоматически.

endeavour_prПостоялецwww14 сен. 20183:04#14
MSA2
> Мировые координаты не позволяют менять положение объекта с LineRenderer, хотя я
> не пробовал через сами координаты точки рисовать, может они и появятся в
> канвасе
не, я имею ввиду наобюорот отобращить гуи канвас в ворлд координатах
Я не помню там какие то настройки тыкал но уже не помню :( возможно бред
Страницы: 1 2 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр