Developing in Mac OS / Xcode and BlueprintImplementableEvent tagged functions in C++ do not seem to appear in editor

Hi,

I’m developing an application using Unreal, Xcode 8.2.1 on macOS Sierra, and would like to take advantage of events in Unreal. The functions I tag in C++ as BlueprintImplementableEvent however don’t appear in the Blueprint editor as expected after performing a hot reload. For example, if implementing the following class:

#pragma once

#include "GameFramework/Actor.h"
#include "StructureActor.generated.h"

UCLASS()
class WCURSTRUCTURE_API AStructureActor : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	AStructureActor();

    UFUNCTION(BlueprintCallable, BlueprintImplementableEvent, meta=(DisplayName = "Sensor Status ~ Just Connected to Sensor"))
    void OnSensorDidConnect(int Connected);
    
    UFUNCTION(BlueprintCallable)
    int GetANumber()
    {
        return 10;
    }
    
protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;
	
};

After performing a hot reload in the Unreal Editor, the only events that appear reference-able are as shown below:

127902-events.png

all of which seem to have been inherited from the parent class AActor. According to other posts it seems that performing a hot reload after making event-related changes in C++ on Windows is not enough, and that a rebuild of the editor is actually required. In Xcode, there are a couple editor schemes available for building, but it seems like these were, for the time being, intentionally designed to fail as described in this [post][2], so it seems like hot reloading is all I have at the moment.

The list you showed are delegates, they are diffrent type of event to which you bind functions even from external objects and even classes, single delegate type can be also reused multiple times for different events. They show in property editor because you add them to class as property with BlueprintAssignable specfier, this is how it looks also includes how you declere delegate

https://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/Reference/Properties/Specifiers/BlueprintAssignable/

here is docs about delegates, but it shows C++ use only:

https://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/Delegates/:

The implmentable events (as well as native events) show up only in node list or as overrideable function, so right click on empty space of blueprint and search and it should be there. Unlike delegates they can be only implmented inside the class they are in or class that inherent it. Implmentable should be used only to events that relates to that actor class, delegates when event are more benificial to external class, like for example trigger box, collision detection event is kind of useless for trigger box it self, but for other object or level blueprint this this event is more useful.

Also try remove BlueprintCallable if i’m not mistaken you can call event either way BlueprintImplementableEvent alone should do the job

Ah, thank you for your explanation. Really cleared things up - not only was I looking at the wrong list, but I was trying to access that event from another unrelated actor class.

I really appreciate you taking the time to answer; thanks again!

Those are Actor events, they are in your actor, what im saiding is you can access them externally from other class but oyu can use them inside same class too

Right, but then to accessing such events externally would then require me to declare delegates accordingly as you mentioned earlier.

Ah, I was able to implement both delegate and implementableevent successfully, and have a much better understanding than I did starting out. Thanks again.