Вот и очередная отсечка в разработке своей игры. Проблема которую решал на этой неделе является поиск пути. Все мы знаем как он важен в RTS.
Поиск пути из коробке в плагине xgm.guru/p/ue/Nemnogo-pro-sozdanie-rts-v-UE-5-f3E никакой) Поэтому я переключил для начала его на detour crowd.
В blueprint это можно сделать просто выбрав нужный AI controller
В C++ это можно так:
.cpp файл вашего ai controller:
Поиск пути из коробке в плагине xgm.guru/p/ue/Nemnogo-pro-sozdanie-rts-v-UE-5-f3E никакой) Поэтому я переключил для начала его на detour crowd.
В blueprint это можно сделать просто выбрав нужный AI controller
В C++ это можно так:
.cpp файл вашего ai controller:
#include "AIModulePrivate.h"
#include "DetourCrowdAIController.h"
#include "Navigation/CrowdFollowingComponent.h"
ADetourCrowdAIController::ADetourCrowdAIController(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer.SetDefaultSubobjectClass<UCrowdFollowingComponent>(TEXT("PathFollowingComponent")))
{
}
.h файл вашего ai controller:
#pragma once
#include "AIController.h"
#include "DetourCrowdAIController.generated.h"
UCLASS()
class ADetourCrowdAIController : public AAIController
{
GENERATED_BODY()
public:
ADetourCrowdAIController(const FObjectInitializer& ObjectInitializer);
};
(Примеры взял отсюда forums.unrealengine.com/t/how-to-enable-detourcrowds/27356/6, но я когда делал сделал так же и все заработало)
В detour crowd есть несколько ограничений:
- Максимальное число агентов (его можно увеличить, но нагрузка на систему возрастает)
- Толпы плохо ходят (управление группой юнитов совсем не очень, ниже покажу)
- Он из коробки не предназначен для RTS
Поэтому я пошел по третьему пути и сделал свой поиск пути. Это грубо конечно, свой поиск я не делал, я просто взял идею вот из этих вот статей howtorts.github.io (очень полезный цикл статей)
Поиск имеет название Flowfield, такой но с большими доработками используется в starcraft. В целом вот так выглядит результат:
Поиск имеет название Flowfield, такой но с большими доработками используется в starcraft. В целом вот так выглядит результат:
2k на карте юнитов
200 юнитов
Можно сравнить за одно как работают оба варианта
Из особенностей нет проблем в передвижении больших групп
Можно сравнить за одно как работают оба варианта
Из особенностей нет проблем в передвижении больших групп
Проблемы поиска пути которые еще есть:
- Ходим только на 45 градусов
- Если встречаем юнита то надо чуть заранее его обьезжать
- Когда пришли в конечную точку не понятно как встать если другой юнит там стоит (если знаете что сделать расскажите плиз)
Ред. Slavaslava56ru