Полезное

Мы Вконтакте

Discord канал

#
Аватара пользователя
Пользователь
Сообщения: 3
Есть ли в классе 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 при выполнении клика нет этой информации?
Аватара пользователя
Пользователь
Сообщения: 195
трасируй луч.. он тебе даст инфу, в какой компонент он ударился.. вроде ничего сложного
Аватара пользователя
Пользователь
Сообщения: 2319
у каждого меша есть свой делегат OnClicked
стандартный клик анриала смотрим в методе "virtual bool APlayerController::InputKey()" там эти делегаты вызываются.
_________________
we need to go deeper


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница