Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Unity3d. Как сделать чтоб рисование линий не происходило по геймобджекту?

Unity3d. Как сделать чтоб рисование линий не происходило по геймобджекту?

AlexHНовичокwww6 июня 201814:21#0
День добрый. Столкнулся с задачей, которая менее тривиальна (для меня, по крайней мере), чем кажется на первый взгляд.
Суть
Делаю 2д физический пазл. Идея в том, чтоб нарисовать на экране несколько линий, потом включить гравитацию, под воздействием которой мячик-герой начнет падать/катиться по линиям и взаимодействовать с объектами, которых касается. Нужно доставить таким непрямым способом мяч до точки-финиша. Похоже на Incredible Machine.
Загвоздка
Основу рисования линий я написал. Использую LineRenderer и много BoxCollider2D. Но надо сделать, чтоб линия не рисовалась по объектам (мячу и препятствиям). Как на рисунке.
What to achive | Unity3d. Как сделать чтоб рисование линий не происходило по геймобджекту?
Не могу понять, как это правильно сделать. Тут надо учесть, что LineCollider состоит из отрезков и нельзя чтоб удалялся весь отрезок пересекающий наш объект, иначе в линии будет больше разрыв, чем надо. Пожалуйста помогите.
Также выкладываю свой код:
+ Показать
SazonoffПостоялецwww6 июня 201816:06#1
Но надо сделать, чтоб линия не рисовалась по объектам (мячу и препятствиям).

Если по простому - Перед тем как добавить точку в список делай Raycast. Если препятствие - не добавляешь и принудительно строишь свою линию по имеющимся точкам(Естественно если ранее в список были внесены хотя бы две точки с определенным минимальным расстоянием).

Я бы сделал так:
1)Один скрипт отвечает за инпут от игрока(сбор точек).
2)Второй скрипт отвечает за строительство линий. Имеет один публичный метод - BuildLine(List<Vector2> points). Создает объект(или выдергивает из пула), рисует, добавляет коллаидер и прочее касательно создания линий.
3)Первый скрипт собирает точки, в случае отжимания мышки или попадания по препятствию - вызываем у строителя BuildLine с массивом точек. Очищаем массив с точками и готовы снова рисовать.

P.S Имхо, лаин рендереры и множественные Box Colliders - такой себе вариант. Лучше построить Mesh для линии + edge/polygon коллаидер по тем же точкам. На крайняк хотя бы Line renderer + один edge/polygon коллайдер.

Правка: 6 июня 2018 16:10

AlexHНовичокwww7 июня 20187:23#2
Sazonoff
Спасибо! Я вот сейчас пробую это сделать. Правда, рейкаст что-то не всегда отрабатывает, что в Update, что в FixedUpdate. Поэтому пробую сделать через определение коллизий и последующее удаление ненужного отрезка.
SuslikМодераторwww7 июня 20187:37#3
AlexH
я не понимаю, что тебе нужно, но если ты хочешь, чтобы один объект рисовался поверх другого, то либо рисуй их в нужном порядке, либо используй z-buffer.
AlexHНовичокwww7 июня 201813:26#4
Suslik
да, я бы так и сделал, но объекты потом двигаются и сталкиваются с линией, и надо все-таки затирать часть линий). Еще не сообразил, как.

Правка: 7 июня 2018 13:41

SuslikМодераторwww7 июня 201813:47#5
AlexH
> Suslik
> да, я бы так и сделал, но объекты потом двигаются и сталкиваются с линией, и
> надо все-таки затирать часть линий). Еще не сообразил, как.
я всё равно ума не приложу, что ты пытаешься получить. приложи нормальный скриншот, что ты получаешь и что ты хочешь получить.
AlexHНовичокwww7 июня 201820:41#6
Suslik
что получаю -
Линия рисуется поверх мяча или под ним или с разрывом но не там где надо)
тут со скриншотом не выходит, т. к. не могу сейчас собрать приложение(

что хочу получить -
1) когда мячик статичен и мы по нему пытаемся рисовать (провести через него кривую)
1 | Unity3d. Как сделать чтоб рисование линий не происходило по геймобджекту?
2) после этого нажимаю кнопку Старт, включается гравитация, мячик падает вниз (в скриншот не попал), а в линии мы видим разрыв на месте мячика.
2 | Unity3d. Как сделать чтоб рисование линий не происходило по геймобджекту?
это игра про рисование "pусских горок" для мячика.

Правка: 7 июня 2018 20:45

AlexHНовичокwww7 июня 201823:01#7
Решилось. Не знаю как там с производительностью, но решилось. Теперь рисую линию тучей точечных боксов
SuslikМодераторwww8 июня 20183:46#8
AlexH
i_have_no_idea_what_im_doing.jpg
AlexHНовичокwww8 июня 20189:09#9
Suslik
Картинка не появилась) А так - да, я не знаю что делаю)

Правка: 8 июня 2018 9:11

AlexHНовичокwww8 июня 20189:11#10
Учусь на ошибках)

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

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