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