https://youtube.com/live/iHBE1jmZkJY
Второй вариант AI камеры видеонаблюдения, более «честный». Как научить AIPerception размещаться и смотреть из нужных нам мест.
Код C++ который я использовал в своих решениях:
В файле «.h», после «public:» добавляем:
virtual void GetActorEyesViewPoint(FVector& OutLocation, FRotator& OutRotation) const override;
В файле «.cpp», в зависимости что нам нужно, добавляем все или некоторые из этих:
#include "Components/CapsuleComponent.h"
#include "Components/StaticMeshComponent.h"
#include "Engine/Engine.h"
Тут первое — если будем искать приклеплённые к капсуле компоненты, среди которых меш с нужным нам тегом «Eyes».
Второе — обязательно если ищем меш.
Третье — только если нужно будет выводить текст в движке подобно printstring.
А это общий код для файла «.cpp», содержащий закомментированные иные варианты, если понадобятся:
void ACPP_CamSurvBase::GetActorEyesViewPoint(FVector& OutLocation, FRotator& OutRotation) const
{
//OutLocation = GetMesh()->GetSocketLocation("HeadSocket");
//OutRotation = GetMesh()->GetSocketRotation("HeadSocket");
OutLocation = GetRootComponent()->GetRelativeLocation();
OutRotation = GetRootComponent()->GetRelativeRotation();
//FRotator CurrentRotation = GetRootComponent()->GetRelativeRotation();
//FRotator NewRotation = CurrentRotation + FRotator(-25.0f, 0.0f, 0.0f);
//OutRotation = NewRotation;
//const TArray<USceneComponent*> ChildComponents = GetRootComponent()->GetAttachChildren();
const TArray<USceneComponent*> ChildComponents = GetCapsuleComponent()->GetAttachChildren();
for (USceneComponent* Child : ChildComponents)
{
// Проверяем, является ли компонент StaticMesh и имеет ли тег "Eyes"
if (UStaticMeshComponent* StaticMesh = Cast<UStaticMeshComponent>(Child))
{
if (StaticMesh->ComponentHasTag("Eyes"))
{
OutLocation = StaticMesh->GetComponentLocation();
OutRotation = StaticMesh->GetComponentRotation();
/*
FString Message = FString::Printf(
TEXT("Found Mesh with Tag 'Eyes'! Location: %s, Rotation: %s"),
*OutLocation.ToString(), // Конвертируем FVector в строку
*OutRotation.ToString() // Конвертируем FRotator в строку
);
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(
-1, // ID сообщения (-1 означает, что сообщение уникально)
50.0f, // Время отображения сообщения в секундах
FColor::Green, // Цвет сообщения
Message // Текст сообщения
);
}
*/
return; // Выходим из функции после нахождения первого совпадения
}
}
}
}
В текущем виде он ищет меш с тэгом «Eyes» среди прикрелённых к капсуле, для замены класса Character(где есть капсула).
Если это нужно в простой pawn, то раскомментируйте строку:
const TArray<USceneComponent*> ChildComponents = GetRootComponent()->GetAttachChildren();
И закомментируйте следующую для капсулы:
const TArray<USceneComponent*> ChildComponents = GetCapsuleComponent()->GetAttachChildren();
Если нужно как для бота в следующем видео, чтобы зрение исходило из сокета «HeadSocket» прописанного в скелете бота, то нужно раскомментировать эти две строки и закомментировать всё остальное после них:
OutLocation = GetMesh()->GetSocketLocation("HeadSocket");
OutRotation = GetMesh()->GetSocketRotation("HeadSocket");
Во всём помогли и вдохновили видео:
Заменяем стандартную функцию определения точки зрения AIPerception на нужную нам, чтобы «зрение» происходило из нужных нам мест и углов — https://youtu.be/rDXGeXK-PNI
Делаем стекло, и учим AIPerception смотреть сквозь него — https://youtu.be/VCqg25Zxd7Y
Заставляем AIPerception следить за головой персонажа а не центром тушки — https://youtu.be/rYWoyz5Hwy8, или сокетами — https://youtu.be/J8UuAtDeR6M
Как удалить ранее созданные но уже не нужные C++ классы из проекта — https://youtu.be/kU9EXDHPJiQ
Простой гайд по AI с которого я начал — https://youtu.be/E-CfaDdjBic
Подробные уроки по AI из которых я узнал как научить роботов видеть(одно из видео) — https://youtu.be/cfizSLpfN64
Мои проекты:
Библиотека звуков — https://www.simpra.org/sound/
Мой ассет рыб — https://www.unrealengine.com/marketplace…
Моя игра — «Tear of Time: Lost memory»
Купить игру в Steam — https://store.steampowered.com/app/1802920/
Купить игру в VKPlay- https://vkplay.ru/play/game/tearoftime_lm/
Купить игру в Epic Games Store — https://store.epicgames.com/ru/p/tear-of-time-lost-memory-add761
Страница ранней демо-версии на itch.io — https://simpra-org.itch.io/tear-of-time-ep1-demo
Другие ссылки на раннюю демо-версию игры:
https://77.md/hata1-g
https://77.md/hata1-m