C++ Declared Event Dispatcher (Dynamic Multicast Delegate) & Blueprint Problem

  • Hi Leute,


    ich bin derzeit dabei einen Prototypen für ein Active Time Battle Kampfsystem zu erstellen und stoße gerade auf ein Problem...


    Ich habe ein BattleHUD (HUD Class) Blueprint was bei BeginPlay ein GetActorsOfClass macht bei dem ein "BattleManager" Actor (geschrieben in C++) gesucht wird und dann als reference im HUD Blueprint abgelegt wird.
    Die Battle Manager C++ Klasse macht im aller ersten Tick() ein Battle Setup was aus der GameInstance die BattleSettings ausließt und die dort enthaltenen Kämpfer ins Level spawned und dann ein Dynamic Multicast Delegate "OnNewActiveFighter" Broadcasted...
    Dies ist mit "BlueprintAssignable" makiert.
    Das BattleHUD Blueprint hat dieses Event über dem "+" Button unten rechts im Details Panel hinzugefügt von der Variable aus nur das Event wird niemals gecalled obwohl es gebroadcasted wird...
    Macht das Adden via "+" Button kein automagisches Binden oder was muss ich machen damit das funktioniert?


    BattleManager.h


    BattleManager.cpp

    Code
    #include "pmc.h"#include "Public/BattleManager.h"#include "PmcGameInstance.h"#include "Fighter.h"#include "PmcStatics.h"// Sets default valuesABattleManager::ABattleManager(){     // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.    PrimaryActorTick.bCanEverTick = true;    isInitialized = false;    fighterConfigDataTable = UPmcStatics::getFighterConfigDataTable();}// Called when the game starts or when spawnedvoid ABattleManager::BeginPlay(){    Super::BeginPlay();}// Called every framevoid ABattleManager::Tick( float DeltaTime ){    Super::Tick( DeltaTime );    if (!isInitialized)    {        setupBattle();        isInitialized = true;    }}void ABattleManager::setupBattle(){    UE_LOG(LogTemp, Log, TEXT("BattleManager: Start Battle Setup..."));    for (auto battleGroupDataItr = getGameInstance()->battleData.battleGroups.CreateIterator(); battleGroupDataItr; battleGroupDataItr++)    {        UE_LOG(LogTemp, Log, TEXT("BattleManager: Start Setup Battle Group."));        for (auto fighterDataItr = (*battleGroupDataItr).fightersData.CreateIterator(); fighterDataItr; fighterDataItr++)        {            UE_LOG(LogTemp, Log, TEXT("BattleManager: Spawn Fighter (NPC: %s)..."), (*fighterDataItr).npc ? TEXT("true") : TEXT("false"));            UClass* fighterClass = UPmcStatics::getFighterClassByRaceAndClass(fighterConfigDataTable, (*fighterDataItr).fighterRace, (*fighterDataItr).fighterClass);            // TODO - Spawn at correct positions            AFighter* fighter = GetWorld()->SpawnActorDeferred<AFighter>(fighterClass, FTransform(FVector(0)));            fighter->fighterId = (*fighterDataItr).fighterId;            fighter->fighterName = (*fighterDataItr).fighterName;            fighter->attributes.constitution = 20; // TODO - Read from battle data instead of hardcoded            // TODO - Add missing initialisations            fighters.Add(fighter);            fighter->FinishSpawning(FTransform(FVector(0))); // TODO - Use correct location            // Call On New Active Fighter Event in All Listining Blueprints            UE_LOG(LogTemp, Log, TEXT("%f: BattleManager Event Broadcast"), UGameplayStatics::GetRealTimeSeconds(GetWorld()));            OnNewActiveFighter.Broadcast(fighter);        }        UE_LOG(LogTemp, Log, TEXT("BattleManager: End Battle Group Setup."));    }    UE_LOG(LogTemp, Log, TEXT("BattleManager: End Battle Setup!"));}


    Battle HUD Issue:


    Mehr hab ich auf C++ Seite nicht da ich dachte das Binden passiert im Blueprint über das "+"


    Weiß da jemand von euch was drüber?