Unreal Engine 4 http://uengine.ru/forum/ |
|
Как определить по какому мешу кликнули внутри класса APawn? http://uengine.ru/forum/viewtopic.php?f=19&t=14696 |
Страница 1 из 1 |
Автор: | FreD_WriteR [ 14 сен 2018, 14:11 ] |
Заголовок сообщения: | Как определить по какому мешу кликнули внутри класса APawn? |
Есть ли в классе 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 при выполнении клика нет этой информации? |
Автор: | gary_cho [ 19 сен 2018, 14:01 ] |
Заголовок сообщения: | |
трасируй луч.. он тебе даст инфу, в какой компонент он ударился.. вроде ничего сложного |
Автор: | Snake [ 19 сен 2018, 18:09 ] |
Заголовок сообщения: | |
у каждого меша есть свой делегат OnClicked стандартный клик анриала смотрим в методе "virtual bool APlayerController::InputKey()" там эти делегаты вызываются. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |