Unreal Engine 4
http://uengine.ru/forum/

OnClicked.AddDynamic(this, &Function);
http://uengine.ru/forum/viewtopic.php?f=19&t=4484
Страница 1 из 1

Автор:  zAvrr [ 07 фев 2017, 23:35 ]
Заголовок сообщения:  OnClicked.AddDynamic(this, &Function);

Вечер добрый, делаю простую игрушку по видео урокам. Наткнулся на проблему, на видео все компилируется и работает, а у меня ошибка. Пролистав темы на англоязычных форумах, пришел к выводу, что виновата версия движка, мол с одним из обновлений как то иначе надо работать с AddDynamic(), но как именно я не понял. Проблема в следующем:

Код:
.h

UFUNCTION() void blockClicked(UPrimitiveComponent* ClickedComp);


Последняя строчка метода void AMyBox::createBlock():

Код:
.cpp

   
    void AMyBox::blockClicked(UPrimitiveComponent* ClickedComp)
    {
       randColor();
    }
   
    void AMyBox::createBlock()
    {
       DummyRoot = CreateDefaultSubobject<USceneComponent>(TEXT("Dummy0"));
       RootComponent = DummyRoot;
       class UStaticMesh* BlockStatickMesh;
       BlockStatickMesh = ConstructorHelpers::FObjectFinderOptional<UStaticMesh>(TEXT("StaticMesh'/Game/MyBlock.MyBlock'")).Get();
       BlockMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("BlockMesh0"));
       BlockMesh->SetStaticMesh(BlockStatickMesh);
       TempMaterial = ConstructorHelpers::FObjectFinderOptional<UMaterial>(TEXT("Material'/Game/Blue.Blue'")).Get();
       BlockMesh->SetMaterial(0, TempMaterial);
       BlockMesh->AttachTo(DummyRoot);
       BlockMesh->OnClicked.AddDynamic(this, &AMyBox::blockClicked); //there is no instance of function template //matches the argument list.
    }

Автор:  gary_cho [ 08 фев 2017, 11:59 ]
Заголовок сообщения: 

Что за код
class UStaticMesh* BlockStatickMesh;
BlockStatickMesh = ConstructorHelpers::FObjectFinderOptional<UStaticMesh>(TEXT("StaticMesh'/Game/MyBlock.MyBlock'")).Get();

Почему нельзя написать красиво
UStaticMesh * BlockStatickMesh = ConstructorHelpers::FObjectFinderOptional<UStaticMesh>(TEXT("StaticMesh'/Game/MyBlock.MyBlock'")).Get();

Попробуй так написать
UFUNCTION()
void blockClicked(UPrimitiveComponent* ClickedComp, FKey ButtonPressed );

Смотри сигнатуру делегата FComponentOnClickedSignature OnClicked;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( FComponentOnClickedSignature, UPrimitiveComponent*, TouchedComponent , FKey, ButtonPressed);

Автор:  zAvrr [ 08 фев 2017, 22:34 ]
Заголовок сообщения:  Re:

gary_cho писал(а):
Что за код
class UStaticMesh* BlockStatickMesh;
BlockStatickMesh = ConstructorHelpers::FObjectFinderOptional<UStaticMesh>(TEXT("StaticMesh'/Game/MyBlock.MyBlock'")).Get();

Почему нельзя написать красиво
UStaticMesh * BlockStatickMesh = ConstructorHelpers::FObjectFinderOptional<UStaticMesh>(TEXT("StaticMesh'/Game/MyBlock.MyBlock'")).Get();

Все от недостатка опыта)

gary_cho писал(а):
Попробуй так написать
UFUNCTION()
void blockClicked(UPrimitiveComponent* ClickedComp, FKey ButtonPressed );

Смотри сигнатуру делегата FComponentOnClickedSignature OnClicked;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( FComponentOnClickedSignature, UPrimitiveComponent*, TouchedComponent , FKey, ButtonPressed);


Спасибо большое, все работает.

Автор:  andre [ 03 май 2017, 16:32 ]
Заголовок сообщения: 

Очень не советую юзать конструкции типа ConstructorHelpers, тем более как я понял даже не из конструктора!

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/