Есть ли в классе Pawn функционал для отслеживания событий мыши, клавиатуры по конкретному мешу внутри Pawn?
Есть Pawn, в нем определены несколько мешей, функция шаблон для OnClicked.AddDynamic, переопределенная функция для настройки контроллера:
.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Pawn.h"
#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
#include "Components/BoxComponent.h"
#include "Components/Button.h"
#include "PlayerPawn.generated.h"
UCLASS()
class ANONIMMATHPROJECT_API APlayerPawn : public APawn
{
GENERATED_BODY()
public:
// Sets default values for this pawn's properties
APlayerPawn();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
virtual void PossessedBy(AController* NewController) override;
APlayerController* PlayerController;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn")
UBoxComponent* PawnCollision;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Pawn")
UStaticMeshComponent* PawnPlane;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn")
UStaticMeshComponent* PawnButton;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn")
UStaticMeshComponent* PawnButton1;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn")
USpringArmComponent* CamSpringArm;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn")
UCameraComponent* PawnCamera;
UFUNCTION()
void OnSelecded(AActor* Target, FKey Key);
};
.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "PlayerPawn.h"
#include "Components/StaticMeshComponent.h"
#include "Components/InputComponent.h"
#include "GameFramework/PlayerController.h"
// Sets default values
APlayerPawn::APlayerPawn()
{
// Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
OnClicked.AddDynamic(this, &APlayerPawn::OnSelecded);
PawnCollision = CreateDefaultSubobject<UBoxComponent>(TEXT("PawnCollision"));
SetRootComponent(PawnCollision);
PawnButton = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("PawmButton"));
PawnButton->SetupAttachment(PawnCollision);
PawnButton1 = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("PawmButton1"));
PawnButton1->SetupAttachment(PawnCollision);
PawnPlane = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("PawnPlane"));
PawnPlane->SetupAttachment(PawnCollision);
CamSpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("CamSpringArm"));
CamSpringArm->SetupAttachment(PawnCollision);
PawnCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("PawnCamera"));
PawnCamera->SetupAttachment(CamSpringArm);
}
// Called when the game starts or when spawned
void APlayerPawn::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void APlayerPawn::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
// Called to bind functionality to input
void APlayerPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
}
void APlayerPawn::OnSelecded(AActor* Target, FKey Key)
{
UE_LOG(LogTemp, Warning, TEXT("Pawn selected"));
}
void APlayerPawn::PossessedBy(AController* NewController)
{
APlayerController* PlayerController = Cast<APlayerController>(NewController);
PlayerController->bShowMouseCursor = true;
PlayerController->bEnableClickEvents = true;
PlayerController->bEnableMouseOverEvents = true;
PlayerController->DefaultClickTraceChannel = ECollisionChannel::ECC_Pawn;
}
Все три меша настроены в блупринтах, для примера выбраны кубы. При клике по одному из кубов в лог выводится сообщение, то есть клики работают. Как определить имя меша, по которому произошел клик? Неужели в AActor* Target при выполнении клика нет этой информации?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я бы хотел разобраться в том, каким образом названные функции реализуют сохранение информации о последней возникшей ошибке в текущем вызывающем...
Необходимо создать wav файл в котором будут сохранены дорожки нескольких wav файлаМожно посоветовать и библиотеку которая занимается этим...
У меня идет обратный отсчет, который отображается в TextViewПри смене ориентации текст в TextView становится указанным в xml разметке