Announcement

Collapse
No announcement yet.

Не срабатывает событие по нажатию на объект в сцене.

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Не срабатывает событие по нажатию на объект в сцене.

    Добрый(утро || день|| вечер).
    Пытаюсь реализовать появление сообщения на экране по нажатию курсором мышки на объект типа куб в сцене. Реализую все в C++. За исключением пожалуй контроллера для мышки. Его по мануалу реализовал в BP.
    Наследуюсь от Actor.
    .h файл
    Code:
    UFUNCTION()
    	void Debug(FString Msg);
    UFUNCTION()
    	void BlockClicked(UPrimitiveComponent *ClickableComponent,FKey inKey);
    
    private:
            USceneComponent *ButtonSceneComponent;
    	UStaticMeshComponent *ButtonMeshComp;
    	UStaticMesh *ButtonStaticMesh;
    	UMaterial* ButtonMaterial;
    .сpp файл
    Code:
    ATargetFloor::ATargetFloor(const FObjectInitializer & ObjectInitializer) :Super(ObjectInitializer) {
    PrimaryActorTick.bCanEverTick = true;
    RootComponent = ObjectInitializer.CreateDefaultSubobject<USceneComponent>(this, TEXT("RootComponent"));
    ButtonSceneComponent = ObjectInitializer.CreateDefaultSubobject<USceneComponent>(this,TEXT("VisibleComponent"));
    ButtonSceneComponent->AttachToComponent(RootComponent, FAttachmentTransformRules::KeepWorldTransform);
    ButtonMeshComp = ObjectInitializer.CreateDefaultSubobject<UStaticMeshComponent>(this,TEXT("MeshComponent"));
    ButtonMeshComp->AttachToComponent(ButtonSceneComponent, FAttachmentTransformRules::KeepWorldTransform);
    ButtonStaticMesh = ConstructorHelpers::FObjectFinder<UStaticMesh>(TEXT("StaticMesh'/Game/MobileStarterContent/Mesh/ButtonBoxMesh.ButtonBoxMesh'")).Object;
    	if (ButtonStaticMesh != NULL) ButtonMeshComp->SetStaticMesh(ButtonStaticMesh);
    ButtonMaterial = ConstructorHelpers::FObjectFinder<UMaterial>(TEXT("Material'/Game/MobileStarterContent/Materials/M_Brick_Clay_New.M_Brick_Clay_New'")).Object;
    	if (ButtonMaterial != NULL) ButtonMeshComp->SetMaterial(0,ButtonMaterial);
    ButtonMeshComp->OnClicked.AddDynamic(this,&ATargetFloor::BlockClicked);
    }
    void ATargetFloor::Debug(FString Msg) {
    	if(GEngine) GEngine->AddOnScreenDebugMessage(-1, 1, FColor::Red, Msg);
    }
    
    void ATargetFloor::BlockClicked(UPrimitiveComponent *ClickableComponent,FKey inKey) {
    	Debug(TEXT("Click"));
    }
    Сначало я создаю root компонент иерархии. Потом к нему добавляю компонент сцены, чтобы его было видно, потом компонент меха, к нему цепляю уже статический мех. в данном случае у меня это просто коробка.Ну и материал для наглядности. Рендерится все чудненько, но вот на клик мышки никак не реагирует. Не могу понять что я делаю не так. По мануалам должно же работать.

    #2
    Вроде все нормально, надо искать проблему в блюпринте. Проверь контроллер, настройки коллизии, есть ли вообще коллизия у этого меша, стоит ли галочка Enable Collision у материала в редакторе мешей.

    И в конструкторе надо использовать SetupAttachment(компонент, сокет), а не AttachToComponent(...). Еще в определении перед указателями на объекты должно быть прописано UPROPERTY(), иначе сборщик мусора может их убить.
    Marketplace: Vive Mocap Kit / Fingers Solver / VR IK Body Solver / Subtitles to LipSync / Dialogue System with Character Animation
    And random stuff at Youtube

    Comment

    Working...
    X