Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Передвижение группы

Передвижение группы

Поделиться

Страницы: 1 2 3 4 Следующая

NeutyНовичокwww7 мар. 201617:57#0
  Здравствуйте, уважаемые жители форума! У меня возникла одна проблемка: как сделать кооперативное передвижение ботов?
  Скажем так, есть небольшой остров, на котором находятся здания: все здания прямоугольной формы, а сам остров плоский, то есть везде координата z одинакова. На острове ходят зомби, когда они "видят" игрока, то охотятся за ним, при определенных условиях может получиться так, что оба зомби будут стремиться пройти через одну и ту же точку, что смотрится некрасиво, плюс по достижению игрока они переходят в атаку, стоя при этом в одной точке. Я читал различные статьи на английском про групповые формации в играх, но реализовать на практике пока что не удалось. Хотел бы услышать Ваши идеи по этому поводу, к примеру, чтобы групповая формация этих зомби была в виде треугольника или прямоугольника, необходимо учитывать много моментов, если бы остров был без зданий - просто полем, то выстроить зомби было бы куда проще, но из-за зданий, необходимо писать алгоритмы, которые заставят всю группу равномерно смещаться, читал также про назначение главного для группы и следования других ботов за ним, но на практике в динамике с учетом зданий мне сложно представить уникальный алгоритм для красивого перестроения, заранее спасибо!
Dan DiamondПостоялецwww7 мар. 201618:14#1
Neuty
> Здравствуйте, уважаемые жители форума! У меня возникла одна проблемка: как
> сделать кооперативное передвижение ботов?
>   Скажем так, есть небольшой остров, на котором находятся здания: все здания
> прямоугольной формы, а сам остров плоский, то есть везде координата z
> одинакова. На острове ходят зомби, когда они "видят" игрока, то охотятся за
> ним, при определенных условиях может получиться так, что оба зомби будут
> стремиться пройти через одну и ту же точку, что смотрится некрасиво, плюс по
> достижению игрока они переходят в атаку, стоя при этом в одной точке. Я читал
> различные статьи на английском про групповые формации в играх, но реализовать
> на практике пока что не удалось. Хотел бы услышать Ваши идеи по этому поводу, к
> примеру, чтобы групповая формация этих зомби была в виде треугольника или
> прямоугольника, необходимо учитывать много моментов, если бы остров был без
> зданий - просто полем, то выстроить зомби было бы куда проще, но из-за зданий,
> необходимо писать алгоритмы, которые заставят всю группу равномерно смещаться,
> читал также про назначение главного для группы и следования других ботов за
> ним, но на практике в динамике с учетом зданий мне сложно представить
> уникальный алгоритм для красивого перестроения, заранее спасибо!
Тебе надо именно толпу зомби организовать?
Можно попробовать использовать Potential fields:
http://aigamedev.com/open/tutorials/potential-fields/
http://gamedevelopment.tutsplus.com/tutorials/understanding-goal-… -gamedev-9007

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

NeutyНовичокwww7 мар. 201618:21#2
На данный момент всё происходит так: есть здания на острове, их 48 штук, по периметру каждого здания, так как они квадратные или прямоугольные есть по 4 точки - края здания, бот засекает игрока рейкастингом и ещё парой проверок, так вот, когда бот рейкастит в игрока - он бежит напрямую, по диагонали то есть, если игрок скрылся за зданием включается глобальный поиск пути, то есть он побежит к ближайшей точки здания к игроку и оттуда будет его преследовать некоторое время, если лучи от бота к игроку снова будут свободны и не пересекутся со зданием, то он побежит напрямую и так, пока не достигнет близкого расстояния для атаки. Проблема в том, что зомби побегут к игроку и пересекутся рано или поздно, либо по диагонали, либо, при глобальном поиске пути ,когда все побегут на одну и туже ближайшую точку здания, скорости всех ботов одинаковы, но при угловом перемещении, конечно же, скорости изменяются, скажем так для одного бота от себя самого до игрока дойти - проблем нет, но для нескольких может быть много пересечений, а хотелось бы, чтобы они выдерживали расстояние друг между другом, надеюсь более менее понятно объяснил, если что я опишу ещё=)
tacПостоялецwww7 мар. 201623:00#3
> хотелось бы, чтобы они выдерживали расстояние друг между другом

Ну так пусть они относятся к "коллегам-зомби" как к зданиям, с определенным размером, которые надо обходить

NeutyНовичокwww7 мар. 201623:25#4
но как тогда выдержать формацию, их будет дергать просто по карте, а хотелось бы нечто нормально выглядящее)
tacПостоялецwww7 мар. 201623:43#5
Ну возьмите центр формации, каждому зомби задайте смещение относительно его. Поиск жертвы осуществляйте так как будто ищет один зомби в центре. У остальных же просто задача придерживаться заданного смещения центра. При наличии столкновения они должны его просто обходить и возвращаться с своему смещению центра /если хотим сложнее, то возможен вариант когда они ждут когда пройдет колона/
NeutyНовичокwww7 мар. 201623:52#6
здесь проблема в алгоритме: выдержка формации несталкивания + обход препятствий, если даже изначально задавать смещения от главного (ближайшего к игроку) бота, то они не всегда могут быть выдержаны, точки попадут на препятствия и необходимо будет двигать уже и другую часть группы, а не только одного, то есть динамическая формация какая-то, вот я и хотел как-то попроще это реализовать, в динамике все сложнее, так вот в уме сложно сразу все варианты просмотреть
tacПостоялецwww8 мар. 20160:38#7
> динамическая формация какая-то

Конечно, она будет изменять свою форму при наличии столкновений, а Вы как хотите? удерживать всегда скажем ровный треугольник? Так это не естественно в игре ... но тогда работайте с формацией как с одним зомби имеющим размеры этого треугольника

NeutyНовичокwww8 мар. 20160:41#8
я не хочу удерживать какую-то конкретную форму, моя цель сделать движение от зомби к игроку без столкновений зомби с препятствиями или другими зомби, для этого нужен алгоритм, который учтет все нюансы
tacПостоялецwww8 мар. 20160:43#9
Neuty
> ближайшего к игроку

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

NeutyНовичокwww8 мар. 20160:44#10
ну а как тогда этот центр брать, типа получать всех зомби, которые следуют за данным игроком и высчитывать того, кто находится центральнее остальных?
tacПостоялецwww8 мар. 20160:47#11
Neuty
> движение от зомби к игроку без столкновений зомби с препятствиями или другими
> зомби

судя по этому "бот засекает игрока рейкастингом" вы используете движок, в котором можно засечь препятствие. Каждый зомби должен иметь простенький алгоритм - двигаться к своему смещению относительно центрального зомби. При наличии столкновения рандомно поворачиваться и пытаться обойти, если он окружен просто стоять и ждать, когда освободится место.

tacПостоялецwww8 мар. 20160:51#12
Neuty
> ну а как тогда этот центр брать

Ну они же у вас изначально в формации какой-то ? Назначьте того, кто в центре ... Или у вас они разбредаются, относительно формации ? тогда чего-то вы недоговариваете

NeutyНовичокwww8 мар. 20160:56#13
хорошо, опишу то, какие они сейчас: зомби бродят туда-сюда сквозь карту выдерживая определенный радиус относительно спавна, при засечении игрока, а именно: пускании в него лучей, когда зомби находится лицом к игроку, состояние зомби с состояния патруль сменяется на состояние - охота, в состоянии охота бот начинает преследование, если препятствий между игроком и зомби нет - бот двигается по диагонали, если есть - бот бежит к ближайшей точке к игру от здания и относительно этих точек он ищет игрока до тех пор, пока между игроком и зомби не будет препятствий, и так для каждого зомби, на данный момент все они автономны, поэтому они, так сказать, не видят других зомби
tacПостоялецwww8 мар. 20160:59#14
> не видят других зомби

Первый шаг

> Ну так пусть они относятся к "коллегам-зомби" как к зданиям, с определенным размером, которые надо обходить

Далее я так понимаю формацию вы хотите создать в процессе погони? Может излишне и первого шага хватит ?

Если они изначально не в формации, то центрального надо назначать динамически, кого по сути без разницы ... например того, кто первый увидел ... но тогда остальные должны бежать не за игроком, а за зомби преследователем, пытаясь занять свое место в стае погони. Можно конечно и переназначать главного, если кто-то оказался ближе, а то и вовсе разделить на 2-3 группы, если есть желание загнать игрока с разных сторон

Правка: 8 мар. 2016 1:04

Страницы: 1 2 3 4 Следующая

/ Форум / Программирование игр / Игровая логика и ИИ

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