Задать вопрос
@232321fdsa

Не вызывается логика метода переопределенного в blueprint, что делать?

У меня есть класс Item и он имеет такую ​​логику
.h
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"

#include "Item.generated.h"

UCLASS()
class LEADOFF_API AItem : public AActor
{
	GENERATED_BODY()
	
public:	
	// Use item
	UFUNCTION(/*BlueprintImplementableEvent*/BlueprintNativeEvent, BlueprintCallable, Category = "Item")
	void Use();

	UFUNCTION(BlueprintCallable, Category = "Item")
	virtual void Use_Implementation();
};

.cpp
void AItem::Use_Implementation() {
	UE_LOG(LogTemp, Warning, TEXT("Base use using"));
}

и у меня есть наследник
.h
#include "CoreMinimal.h"
#include "Inventory/Item.h"
#include "DroppedItem.generated.h"

class LEADOFF_API ADroppedItem : public AItem
{
	GENERATED_BODY()
	
protected:
    AItem* BodyUse; // For use

public:
    void Use();

    virtual void Use_Implementation() override;
};

.cpp
void ADroppedItem::Use_Implementation() {
    Super::Use_Implementation();

    if (BodyUse) {
        BodyUse->Use();
        //BodyUse();
        UE_LOG(LogTemp, Warning, TEXT("Good call BodyUse"));
    }
    else UE_LOG(LogTemp, Warning, TEXT("Bodyuse has nullptr"));
}

а также у меня есть InputAction
UPROPERTY(EditAnywhere, Category = "EnhancedInput")
UInputAction* UseAction;

и бинд их
Input->BindAction(UseAction,        ETriggerEvent::Started,   this, &AMainPlayer::UseItem);

в UseItem
if (InventoryComponent && InventoryComponent->HasInActiveSlot()) {

    AItem* ActiveItem = InventoryComponent->/*GetItemInActiveSlot()*/GetItemInActiveSlot();

    if (ActiveItem)
        ActiveItem->Use();

    UE_LOG(LogTemp, Warning, TEXT("Item use"));
}
else UE_LOG(LogTemp, Warning, TEXT("Bad item use"));

и проблема у меня в том, что когда я вызываю ActiveItem->Use(); У меня ничего не происходит, хотя должно UE_LOG(LogTemp, Warning, TEXT("Item use"));
но сама логика использования не выполняется, хотя она переопределена в Blueprint.
В Blueprint такая логика:

66d99750a8512403656294.png

почему не вызывается?
  • Вопрос задан
  • 123 просмотра
Подписаться 3 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Alien202
По моему, код должен иметь такой вид в .h файле родительского класса.
UFUNCTION(BlueprintNativeEvent)
	virtual void Use();
	virtual void Use_Implementation();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы