Расстояние по "нити"

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Расстояние по "нити"

Сообщение SuperBilge 05 ноя 2013, 14:19

Доброго времени суток. Всплыл такой вопрос: как посчитать расстояние между двумя объектами, между которыми расположена преграда. Есть какая-то интерпретация натянутой нити, которая по кратчайшему расстоянию задевает углы "преграды"? Я видел какой-то урок с навмешем, где у появившегося объекта появлялась наикратчайшая траектория, которая обходила все объекты. Но тут же нашел в Unity -> Learn, что навмеш это только для Про версии юнити. Кто нибудь сталкивался с такой проблемой? Буду рад какой-нибудь ссылке или хотябы методу какому-нибудь.
The King is dead. Long live the King.
SuperBilge
UNец
 
Сообщения: 24
Зарегистрирован: 07 май 2013, 18:50
Откуда: Омск
Skype: heysunway

Re: Расстояние по "нити"

Сообщение PoqXert 05 ноя 2013, 14:27

Варианты:
0. Найти решение в AssetStore (запрос path)
1. Написать скрипт поиска пути (в гугле можно найти алгоритмы)
Расширения для Unity3D
Блог программиста - PoqXert.ru
PoqXert
UNITрон
 
Сообщения: 244
Зарегистрирован: 20 мар 2011, 01:12
  • Сайт

Re: Расстояние по "нити"

Сообщение porcha 05 ноя 2013, 15:51

Через поиск пути А* как бы проще всего.
Если объект сразу же за стеной то расстояние будет равным двум гипотинузам двух треугольников + ширина стены
GameDev Проект
porcha
UNITрон
 
Сообщения: 188
Зарегистрирован: 28 мар 2013, 19:47

Re: Расстояние по "нити"

Сообщение BornFoRdeatH 05 ноя 2013, 17:00

На сколько я знаю, навмеш давно есть в фри,только обстакли вроде отсутствуют.

UPD. Ошибся, офмеш линки отсутствуют http://unity3d.com/unity/licenses
UPD. Не дочитал, обстакли тоже отсутствуют :)
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: Расстояние по "нити"

Сообщение SuperBilge 05 ноя 2013, 21:41

porcha писал(а):Через поиск пути А* как бы проще всего.
Если объект сразу же за стеной то расстояние будет равным двум гипотинузам двух треугольников + ширина стены

Можно тебя попросить поделиться какой-нибудь ссылкой или личным опытом по А* ? Заранее спасибо.
The King is dead. Long live the King.
SuperBilge
UNец
 
Сообщения: 24
Зарегистрирован: 07 май 2013, 18:50
Откуда: Омск
Skype: heysunway

Re: Расстояние по "нити"

Сообщение Syberex 05 ноя 2013, 22:27

Чтобы воспользоваться поиском пути нужен будет граф :)
Он у вас есть?
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Расстояние по "нити"

Сообщение porcha 05 ноя 2013, 23:24

Можно тебя попросить поделиться какой-нибудь ссылкой или личным опытом по А* ?
^
может просто бы так и сделал?
По А* проще некуда, если работаешь в плоскости ХУ есть куча статей начиная с первой ссылкой из гугла "поиск пути А*" и дальше.
Из личного опыта, т к я работал в плоскостях ХУ но где У высота, сам поиск занимал отсилы 50 строк, не считаю БД для ячеек.
Вот даже ссылка наглядной демострации, https://www.youtube.com/watch?v=9avgFy5 ... re=mh_lolz, это была моя самая первая реализованная версия.
GameDev Проект
porcha
UNITрон
 
Сообщения: 188
Зарегистрирован: 28 мар 2013, 19:47

Re: Расстояние по "нити"

Сообщение Syberex 06 ноя 2013, 00:12

У меня есть реализация для Дейкстры и А* на графе. Графу не важно в какой он плоскости. То есть это не в массиве n*m.
Но в этом случае нужен граф. То есть какие то точки описывающие углы объектов, связанные друг с другом.
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Расстояние по "нити"

Сообщение SuperBilge 06 ноя 2013, 12:38

Syberex писал(а):Чтобы воспользоваться поиском пути нужен будет граф :)
Он у вас есть?

Про графы вопросик) Игра у меня в 2D. Y практически у всего это константа. Моя персонаж появляется всегда в одной точке карты. Под ним сразу создается шестиугольник. От этого шестиугольника растет дерево, куда он может пойти, в зависимости от его Очков Движения (один шестиугольник - 1 ОД, всего 4 ОД). Вот моя новая идея: идти к точке только по прямой линии без каких либо заворотов (некоторое исключение поиска пути). Конечно, полностью поиск пути изъять не получится, так как мне надо исключать те шестиугольники, которые стоят за стеной. Вот я подобрался к вопросу: каким методом лучше воспользоваться, чтобы построить свой граф? Я постараюсь нарисовать свою идею и описать ее)
https://drive.google.com/file/d/0B9rJkA ... sp=sharing
вот как-то так в кратце выглядит мое дерево. Я бы хотел так: есть начальная точка (центр шестиугольника, где стоит игрок), есть конечная (центр шестиугольника, на который наведена мышь). Чтобы через эти две точки проходила прямая, которая задевала бы нужные шестиугольники, затем производился бы подсчет шестиугольников, а если шестиугольника на "пути" не хватает, отрезок бы просто не рисовался. И сделать так: если не существует отрезка, передвижение не осуществлять. Как-то так получится ли сделать?)
The King is dead. Long live the King.
SuperBilge
UNец
 
Сообщения: 24
Зарегистрирован: 07 май 2013, 18:50
Откуда: Омск
Skype: heysunway

Re: Расстояние по "нити"

Сообщение DiXel 06 ноя 2013, 15:23

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


Влом было все рейкасты рисовать, но думаю понятно
Светло-голубой - рейкасты
Тёмно-синий - Врезавшиеся рейкасты
Зелёный - старт
Т.е. каждый шестиугольник(на картинке не каждый, ибо лень рисовать) кидает луч в соседние, и отсекает те, что за стеной. Чтобы луч попадал в шестиугольник, у него должен быть невидимый коллайдер, на новом слое коллайдеров, реагирующий только с рейкастом.
split.png

P.S.: Там в центре один тёмно-синий - не обращай внимания, это косяк
P.P.S.:Там слева стена зелёная - не обращай внимания, это косяк :D
У вас нет доступа для просмотра вложений в этом сообщении.
Skype: dixellitum
Mail: _the.dixx@yandex.ru
DiXel
UNIверсал
 
Сообщения: 396
Зарегистрирован: 27 май 2011, 07:19

Re: Расстояние по "нити"

Сообщение Syberex 06 ноя 2013, 15:55

Я вчера тоже хотел предлагать рейкасты, но без графа их надо будет много и это будет уже не быстро. Раз речь зашла о шестиугольниках, я думаю рейкасты уже не нужны, ведь это обычный массив - самый простой граф получается :)
Обычная "карта проходимости". Просто надо учитывать, что через один ряд, ряды имеют смещение на +0,5 (или -0,5). В массиве А* находит путь, для вычисления соседних ячеек нужна будет специальная функция, и при перемещении объекта учитываем смещения рядов.

Но это мои мысли :D , на самом деле я не знаю как в играх реализуют карту из шестиугольников. Но со связанными вейпоинтами будут уже заморочки...
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Расстояние по "нити"

Сообщение SuperBilge 06 ноя 2013, 18:36

DiXel писал(а):а тебе не проще это дерево построить рейкастами? тогда можно будет отсекать те, что за стенами.

Отличная идея) можно какой нибудь пример использования рейкаста через коллайдер в IF? и как мне эти коллайдеры выставлять?
Поковырялся и нашел Linecast. Просто по моей идее игрок не может даже путь себе придумать, если за "камнем" не видит тропы. Будет "туман войны", а поэтому отсылать от каждого шестиугольника лучи мне не надо. Достаточно упереться в какой нибудь "камень". А дальше прекращать проверку в сторону "камня".

Да. Очень много всего... Надо бы попробовать с графами
The King is dead. Long live the King.
SuperBilge
UNец
 
Сообщения: 24
Зарегистрирован: 07 май 2013, 18:50
Откуда: Омск
Skype: heysunway

Re: Расстояние по "нити"

Сообщение SuperBilge 06 ноя 2013, 20:06

Нашел интересный сайт: http://qiao.github.io/PathFinding.js/visual/
вот из всех алгоритмов мне понравился Дейкстры и Breadth-First-Search
думаю надо попробовать реализовать какой нибудь алгоритм для квадратного поля, а потом с шестиугольниками разобраться. Syberex, ты говорил про смещение на 0.5... Можешь подсказать, с чего начать мне создание своего графа? Это ведь условный массив, куда забиваются все объекты по какому то свойству?
The King is dead. Long live the King.
SuperBilge
UNец
 
Сообщения: 24
Зарегистрирован: 07 май 2013, 18:50
Откуда: Омск
Skype: heysunway

Re: Расстояние по "нити"

Сообщение Syberex 08 ноя 2013, 01:23

Ну я же объяснил, обычный двумерный массив, только на карте каждая ячейка четного ряда будет иметь смещение на +0,5 по оси Х.
В массиве ячейки хранятся без смещения.
То есть чтобы рассчитать позицию ячейки 4 нечетного ряда 1 (4,1):
Позиция Х = 4 * расстояние_между_ячейками_по_Х // красная стрелка
Позиция У = 1 * расстояние_между_ячейками_по_У // зеленая стрелка

Чтобы рассчитать позицию ячейки 4 четного ряда 2 (4,2):
Позиция Х = 4 * расстояние_между_ячейками_по_Х + смещение
Позиция У = 2 * расстояние_между_ячейками_по_У

Где
смещение = 0,5 * расстояние_между_ячейками_по_Х

Несложно составить и список соседних ячеек.
У вас нет доступа для просмотра вложений в этом сообщении.
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 29