Полезное

Мы Вконтакте

Discord канал

#
Модератор: icms
Аватара пользователя
Пользователь
Сообщения: 62
Agny писал(а):
Обычно ИИ работает в пределах видимости игрока. А на дальнем расстоянии он отключается. И препятствия никакие не обходит. А просто телепортируется ближе к игроку. Так создается иллюзия как будто он за тобой бежит.

Но если карта размером приблизительно с локацию в hollow knight например, и если отключать тех, кто вне зоны видимости, то с сеткой ведь телефон справится?
Аватара пользователя
Пользователь
Сообщения: 466
В этом то и мысль - что не нужно пытаться сетку делать на всю площадь сразу.

Цитата:
если говорить конкретно о линейке, то там видимость очень далеко, и если затронул монстра, от него уже не убежишь. Через препятствия не телепортируется и будет бежать за тобой хоть из подземелья в город и в каждый дом, и если монстр агрессивный будет жрать всех в городе)).

Однажды какой то клан привел целую кучу тиранозавров из далекого острова в столицу, сожрали многих))

Похоже там финд лук рот по игроку, но какая то логика для обхода препятствий есть.


Для такого эффекта можно просто писать путь игрока по контрольным точкам и дуть за ним. А обход препятствий можно считать по минимальному радиусу вокруг неписи.
_________________
Project SKIT
Аватара пользователя
Пользователь
Сообщения: 62
icms писал(а):
C++ тут точно не причём.В акторе можно спокойно хранить сотни переменных, десяток из которых дико хитрые структуры.

А как мне создавать сетку из акторов с помощью бп, если в констракшене этого делать нельзя, а через save game мне это кажется кривым костылем? И можно ли записать , к примеру, ссылки на акторов в data table?
Аватара пользователя
Пользователь
Сообщения: 466
Цитата:
А как мне создавать сетку из акторов с помощью бп, если в констракшене этого делать нельзя, а через save game мне это кажется кривым костылем? И можно ли записать , к примеру, ссылки на акторов в data table?


Ну вроде наклёвывается конкретный вопрос. А теперь чётко и ясно что вы хотите сделать,в подробностях. Т.е как должна себя вести непись и т.д. и т.п.

Всем молодым разработчкикам очень рекомендую тренироваться именно в этом - точнее в точной и конкретной постановке задачи. Поверьте это 80% всей работы, ну конечно если задача не сокобан, тетрис(т.е. решения с чётко известными правилами).
_________________
Project SKIT
Аватара пользователя
Пользователь
Сообщения: 562
Я помню ещё когда в моде были языки Basic делал свой ИИ для игры. Где то два месяца ушло на эксперименты и анализ. Но получилось. И работало очень быстро.

Потом когда на UE4 перешел. Узнал что есть в нем встроенный ИИ. Обрадовался. Думал всё теперь намного проще. Ничего придумывать самому не надо. Но пока разбирался как с ним работать , пришло разочарование. Оказалось что он плохо работает с движущимися препятствиями.

На мой взгляд проблема в том что он постоянно работает и постоянно ищет путь. И это дает большую просадку FPS.

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

Я всё делал путем математических вычислений в 2d. По уравнениям пересечения прямой и окружности. И пересечения двух прямых. Pawn - это условно говоря окружность. Разные стены - прямые(отрезки). При старте данные о всех препятствиях вычислялись не автоматически. В программе был массив с координатами всех препятствий на карте.

Делается сперва проверка между целью и персонажем. Есть ли препятствие. Если есть, тогда ищется обходной путь. Тоже вычислениями. Сложно это всё конечно. Ну и у меня он не был такой совершенный. Выход из лабиринта он бы не нашел. Просто под конкретную задачу делал его.

Цитата:
Для такого эффекта можно просто писать путь игрока по контрольным точкам и дуть за ним. А обход препятствий можно считать по минимальному радиусу вокруг неписи.


Эти точки называются - waypoints. Можно поискать на эту тему информацию в интернете.
Аватара пользователя
Пользователь
Сообщения: 466
Цитата:
Эти точки называются - waypoints
)))))))))))))))))))))
_________________
Project SKIT
Аватара пользователя
Пользователь
Сообщения: 62
icms писал(а):

Ну вроде наклёвывается конкретный вопрос. А теперь чётко и ясно что вы хотите сделать,в подробностях. Т.е как должна себя вести непись и т.д. и т.п.

Всем молодым разработчкикам очень рекомендую тренироваться именно в этом - точнее в точной и конкретной постановке задачи. Поверьте это 80% всей работы, ну конечно если задача не сокобан, тетрис(т.е. решения с чётко известными правилами).

2д сайдскролер по осям xz, нужна летающая муха, летать должна, конечно, не на всю карту, помимо этого нужно чтобы между собой они адекватно взаимодействовали (не врезаться). Нужна способность обходить препятствия и способность найти путь назад после погони за игроком.
Я делал обхождение препятствий - если прямого пути нет, рей трейсом искал обходной, и все равно для мобилки это тяжко - +- 20 кастов в 1 кадр на 1 нпс. И если далеко уходит вернуться к точке патрулирования не может. Поэтому я думаю, что мне надо как то сделать А*, с заранее сгенерированой сеткой.
Аватара пользователя
Пользователь
Сообщения: 4046
я думаю с помощью лайнтрэйсов без проблем можно написать логику обхождения препятствий в 2д - быструю(если у тебя там не жесткие лабиринты), и совсем не обязательно делать это каждый тик, каждый тик можно только небольшую проверку на динамические препятствия.
Что касается возврата в исходную точку, здесь не обязательно двигаться весь полный путь, как только муха ушла за пределы видимости игрока, можно сразу вернуть ее на место, или воспользоваться тем что выше называют - waypoints, этот же waypoints создавать в процессе поиска пути к игроку.

В любом случае этот алгоритм может быть очень сложным и очень быстрым, и способов реализации этого алгоритма множество.
Аватара пользователя
Пользователь
Сообщения: 466
Полностью согласен с предыдущим комментарием. Осталось выяснить какой формы и какого размера преграды. antokog а дайте нам схематическое изображение вашего уровня(естественно его части) но масштабы что бы были реальными.
_________________
Project SKIT
Аватара пользователя
Пользователь
Сообщения: 562
Найти в 2D координатах точки обхода другого персонажа можно.
Сначала находишь через Atan2 угол направления на нужного тебе персонажа которого нужно обойти.
Дальше задача школьной математики. Тебе нужно найти координаты двух точек( слева и справа) два waypoints(точки обхода).
Представь себе два прямоугольных треугольника которые образуются из точек.
Первая точка - один персонаж. Вторая точка - персонаж которого надо обойти. Третья точка waypoint слева. Четвертая точка waypoint справа.
Нам известны две стороны этих треугольников.
Одна сторона - это расстояние между персонажами. Находим его.
Вторые стороны - это радиус капсулы персонажа, которого нужно нам обойти. Обычно берется больше.
Соотношение сторон в прямоугольном треугольнике: a = b*tg(угол).
Нам нужно найти угол. Делим радиус на расстояние между персонажами.
Получаем Тангенс.
Через Atan находим угол.
Теперь нам нужно найти третью сторону треугольников. По теореме Пифагора: с = Sqrt(a*a + b*b).
Это будет как бы радиус окружности на которой будут находится наши waypoints.
Теперь берем угол, который мы получили от Atan2.
Прибавляем к нему и отнимаем отнимаем угол который мы получил от Atan.
Из этих полученных результатов мы можем найти координаты. Для левой и правой waypoints отдельно делаешь расчет:
x = sin(полученный угол)*радиус окружности + x координата персонажа который обходит
y = cos(полученный угол)*радиус окружности + y координата персонажа который обходит

Вот так на пальцах тебе попробую объяснить как это делается.


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

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница