Движение камеры | Отслеживание движения камеры работает только при зажатой кнопке мыши. UE5 | C++
Здравствуйте коллеги перехожу с unity на UE5, так что могу где-то быть не точным.
Я создал Pawn(Не обращайте внимание что класс называется MyActor, изначально случайно создал Actor , поменял на Pawn)
Проблема в том что движение камеры , должно происходить при движении мыши и оно происходит , но только если какая-то из кнопок мыши нажата.
CPP
#include "MyActor.h"
#include "GameFrameWork/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
#include "GameFrameWork/PlayerController.h"
// Sets default values
AMyActor::AMyActor()
{
PrimaryActorTick.bCanEverTick = true;
AutoPossessPlayer = EAutoReceiveInput::Player0;
SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
RootComponent = SpringArm;
Camera->SetupAttachment(SpringArm);
SpringArm->TargetArmLength = 1000.0f;
SpringArm->SetRelativeRotation(FRotator(-60.0f, 0.0f, 0.0f));
SpringArm->bDoCollisionTest = false;
}
void AMyActor::BeginPlay()
{
Super::BeginPlay();
APlayerController* PC = GetController<APlayerController>();
if (PC)
{
PC->bShowMouseCursor = true;
FInputModeGameAndUI InputMode;
InputMode.SetHideCursorDuringCapture(false); // Важно! Не скрывать курсор при движении
InputMode.SetLockMouseToViewportBehavior(EMouseLockMode::DoNotLock); // Курсор не привязан к окну
PC->SetInputMode(InputMode);
}
}
void AMyActor::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis("MouseX", this, &AMyActor::MoveCameraX);
PlayerInputComponent->BindAxis("MouseY", this, &AMyActor::MoveCameraY);
}
void AMyActor::MoveCameraX(float AxisValue)
{
UE_LOG(LogTemp, Warning, TEXT("Mouse X: %f"), AxisValue);
InputX = AxisValue;
}
void AMyActor::MoveCameraY(float AxisValue)
{
UE_LOG(LogTemp, Warning, TEXT("Mouse Y: %f"), AxisValue);
InputY = AxisValue;
}
void AMyActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
FRotator CameraRotation = SpringArm->GetComponentRotation();
FVector ForwardDirection = FRotationMatrix(CameraRotation).GetUnitAxis(EAxis::X);
ForwardDirection.Z = 0.0f; // Обнуляем вертикальную составляющую
ForwardDirection.Normalize();
FVector RightDirection = FRotationMatrix(CameraRotation).GetUnitAxis(EAxis::Y);
FVector NewLocation = GetActorLocation();
NewLocation += ForwardDirection * InputY * MoveSpeed * DeltaTime;
NewLocation += RightDirection * InputX * MoveSpeed * DeltaTime;
SetActorLocation(NewLocation);
}
.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Pawn.h"
#include "MyActor.generated.h"
class USpringArmComponent;
class UCameraComponent;
UCLASS()
class ROGUELIKE_API AMyActor : public APawn
{
GENERATED_BODY()
public:
AMyActor();
protected:
virtual void BeginPlay() override;
virtual void Tick(float DeltaTime) override;
virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
void MoveCameraX(float AxisValue);
void MoveCameraY(float AxisVulue);
private:
float InputX = 0.0f;
float InputY = 0.0f;
protected:
UPROPERTY(VisibleAnyWhere);
USpringArmComponent* SpringArm;
UPROPERTY(VisibleAnyWhere);
UCameraComponent* Camera;
UPROPERTY(VisibleAnyWhere);
float MoveSpeed = 1000.0f;
};
1.Проверил настройки проекта Input выставлен правильно
2.Есть GameModeBase там одна строчка которая делает мой Pawn базовым, в World Setting он выбран с этим тоже проблем нет
3.Пробовал сделать прямой ввод без Axis , через EKEY , и через BindAxisKey (не помогло)
P.S В отладчике значения Axis от -1 до 1 меняются , но опять же только если какая-то из кнопок мыши зажата просто так не работает.
Теряюсь в догадках , прошу помощи у более опытных коллег чем я.