Хочу создать актора, который просто преследует игрока, как только тот заходит в зону видимости. Из особенностей хочу добавить, что как только игрок будет в упоре, то актор начинал хаотично двигаться вокруг игрока до тех пор, пока игрок не уйдет на расстояние.
Всем отдельно спасибо!
Наткнулся на видеоролик https://youtu.be/DPmO7a3X8Lg?si=QPReL5ZsyQnwdP99 в нем говориться примерно то что мне нужно, но как создать его(преследователя) отдельным актором?
Вот два скриншота, где я лично пытался создать что-то подобное, прошу не бить тапками за кривые блупринты и длинные пути (я всё ещё плохо разбираюсь в кодинге), прошу помочь с исправлением ошибки.
ОШИБКА: Актер имеет маленькую скорость, за игроком он следует через чур криво, ко всему этому он не передвигается (не заходит) на движущиеся платформы.
Если потребуется еще что-то, то попробую представить.
Привет!
Я решил заморочиться и специально создал новый проект, чтобы сделать эту систему с нуля.
-
Сначала я просто дублировал BP_ThirdPersonCharacter (он создаётся автоматически, если выбрать шаблон Third Person).
-
Переименовал его в NPC, чтобы не путаться.
-
Удалил оттуда все ноды — этим персонажем мы управлять не будем.
-
Написал небольшой код, чтобы NPC знал, за кем ему следить.
-
Теперь через Event Tick заставляем его двигаться за нужным персонажем (код ниже).
Если NPC кажется что останавливается далеко то можете поменять нежный цифр оператора
Вот так легко можно сделать систему Follow Me!
Не забудь закинуть NPC на уровень, иначе он просто не появится — спавн пока не прописан.
Надо испоьзовать Behavior Tree. Это сильно запутанная схема, но я делал в UE 4.27 оно работает. Недавно пробовал то же самое воспроизвести в 5.4, ничего не работало.
В целом вам надо изучить это: Behavior Tree in Unreal Engine - Quick Start Guide | Unreal Engine 5.5 Documentation | Epic Developer Community . И воспроизвести у себя. Оно конечно сильно мудреное, но должно дать адекватный результат.
Я завала Указаный вопрос в АИ Студия Гугл вот ответ Да, конечно! Вот Blueprint актора, который будет преследовать игрока, а затем хаотично двигаться вокруг него в упор:
1. Создание Актора:
-
Создайте новый Blueprint Class.
-
В качестве родительского класса выберите Actor.
-
Назовите его, например, BP_ChasingActor.
2. Добавление Компонентов:
-
Добавьте компонент Static Mesh Component (назовите его Mesh) - это будет визуальное представление вашего актора. Выберите любой статический меш, который вам нравится (например, куб или сферу).
-
Добавьте компонент Sphere Collision (назовите его VisibilitySphere). Это будет зона видимости актора. Установите радиус (например, 1000). Установите Collision Presets на OverlapAllDynamic (или OverlapAll), чтобы обнаруживать игрока.
-
Добавьте компонент Sphere Collision (назовите его ProximitySphere). Это будет зона “в упор”, когда актор начинает хаотично двигаться. Установите радиус (например, 200). Установите Collision Presets на OverlapAllDynamic (или OverlapAll), чтобы обнаруживать игрока.
-
Добавьте компонент AI Perception Component. (опционально, для более продвинутого поведения)
3. Blueprint Logic (Event Graph):
Variables:
IsChasing (Boolean) - Является ли актор в режиме преследования.
IsProximity (Boolean) - Является ли игрок в зоне "в упор".
OriginalLocation (Vector) - Начальная позиция актора.
ChaosStartTime (Float) - Время начала хаотичного движения.
ChaosDuration (Float) - Длительность хаотичного движения (например, 2 секунды).
Events:
Event BeginPlay:
Set OriginalLocation to GetActorLocation
VisibilitySphere -> Event OnComponentBeginOverlap (OtherActor):
Branch (IsChasing == false)
True:
Cast To MyCharacter (или ваш класс игрока)
Success:
Set IsChasing to True
VisibilitySphere -> Event OnComponentEndOverlap (OtherActor):
Branch (IsProximity == false)
True:
Cast To MyCharacter (или ваш класс игрока)
Success:
Set IsChasing to False
# Актор возвращается к начальной позиции после выхода из зоны видимости
Simple Move To Location: Target = AIController, Goal = OriginalLocation
ProximitySphere -> Event OnComponentBeginOverlap (OtherActor):
Cast To MyCharacter (или ваш класс игрока)
Success:
Set IsProximity to True
Set ChaosStartTime to GetGameTimeInSeconds
ProximitySphere -> Event OnComponentEndOverlap (OtherActor):
Cast To MyCharacter (или ваш класс игрока)
Success:
Set IsProximity to False
Set IsChasing to True # Возобновить преследование при выходе из "упора"
Event Tick:
Branch (IsChasing)
True:
Branch (IsProximity)
True:
# Хаотичное движение вокруг игрока
Branch (GetGameTimeInSeconds - ChaosStartTime < ChaosDuration) # Проверяем, не истекло ли время хаоса
True:
# Генерация случайного вектора смещения вокруг игрока
SetActorLocation (Lerp):
Start = Current Location
End = Player Location + (Random Unit Vector * Random Float in Range (-100, 100)) # Регулируйте радиус смещения
Alpha = 0.1 (плавность движения)
False:
Set ChaosStartTime to GetGameTimeInSeconds #Сброс таймера
False:
# Преследование игрока
Simple Move To Actor: Target = AIController, Goal = PlayerCharacter
Use code with caution.Blueprint
Пояснения:
-
Переменные:
-
IsChasing: Указывает, активно ли преследование игрока.
-
IsProximity: Указывает, находится ли игрок в зоне “упора”.
-
OriginalLocation: Начальная позиция актора, куда он вернется, если игрок выйдет из зоны видимости.
-
ChaosStartTime: Время начала хаотичного движения (для контроля длительности).
-
ChaosDuration: Продолжительность хаотичного движения (в секундах).
-
-
Event BeginPlay: Сохраняет начальную позицию актора.
-
Overlap Events (VisibilitySphere & ProximitySphere): Эти события активируются, когда игрок входит или выходит из зон видимости и “упора”. Логика внутри этих событий устанавливает значения переменных IsChasing и IsProximity.
-
Event Tick: Этот event выполняется каждый кадр. Здесь основная логика:
-
Если IsChasing true:
-
Если IsProximity true:
-
Движение вокруг игрока. Генерируется случайная точка рядом с игроком, и актор плавно перемещается к этой точке.
-
GetGameTimeInSeconds используется для контроля длительности хаотичного движения. После истечения времени ChaosDuration, цикл хаотичного движения начинается снова.
-
-
Если IsProximity false:
- Актор использует Simple Move To Actor для преследования игрока.
-
-
Важные моменты:
-
MyCharacter : Замените MyCharacter на класс вашего игрока.
-
AIController: Убедитесь, что у вашего актора есть AIController. Если нет, вы можете создать его и назначить в настройках актора (Details panel → Pawn → AI Controller Class). По умолчанию используется AIController.
-
Radius Collision: Настройте радиусы VisibilitySphere и ProximitySphere в соответствии с желаемым поведением.
-
Lerp (SetActorLocation): Используется Lerp (линейная интерполяция) для плавного движения актора в режиме “хаоса”. Значение Alpha (0.1 в примере) определяет скорость и плавность движения.
-
Random Unit Vector * Random Float in Range: Это генерирует случайный вектор в диапазоне заданных значений, позволяя актору двигаться вокруг игрока в случайном направлении. Измените значения в диапазоне, чтобы контролировать радиус хаотичного движения.
-
Simple Move To Location нужно вызвать от AI Controller.
Настройка ассета и тестирование:
-
Перетащите экземпляр BP_ChasingActor на ваш уровень.
-
Настройте параметры Mesh (выберите модель).
-
Настройте радиусы VisibilitySphere и ProximitySphere в соответствии с масштабом вашего уровня.
-
Запустите игру и проверьте, как актор реагирует на приближение игрока.
Этот Blueprint предоставляет базовую структуру. Вы можете добавить дополнительные функции, такие как:
-
Скорость движения актора.
-
Разные типы хаотичного движения.
-
Анимации для актора.
-
Более продвинутый AI с использованием Behavior Trees.
Удачи! Если у вас возникнут дополнительные вопросы, спрашивайте!