I think this might be a problem with your Overlap function signature:
you have
void OnPickupOverlap("UPrimitiveComponent* OnComponentBeginOverlap," UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
the expected signature by the engine is:
void OnBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
so that isn’t intelisense not understanding the macro (if you are using VS 2022 update 17.2 or later it does understand most all the macros, it still doesn’t suggest the correct enum values for UFUNCTION()
or UPROPERTY()
, but it does know what those macros are and what they are expecting) it is the signature not matching the expectation.
for the “just pulling out raw C++ into the level” I would strongly encourage to manually wrap them in a blueprint (the engine will wrap them in a fake blueprint anyways but). By at least wrapping them manually you get the blueprint graph which some things are actually more efficient/consistent to do in the blueprint graph:
- assigning references to things in the Content Browser/Drawer otherwise you will need to assign them on each instance in the level hierarchy, or use Runtime-Resolved-Hard-References (similar to the issue you are having here with you delegate not being bound because the signature is not what the engine is expecting, but instead your Tank object doesn’t appear to load because some one moved/renamed the mesh)
- adding functionality to BlueprintNativeEvent and BlueprintImplementableEvent
- allowing proper instancing with editor default values when instantiating in different levels
- a designer doesn’t need to learn your C++ code base to add functionality
- for rapid testing you can mock up in the classes blueprint to pull into C++ in the same class