У меня есть класс 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 такая логика:
почему не вызывается?