Quick answer: Unreal Blueprint CallFunctionByName not calling the most-derived override? Lookup uses static UFunction; overrides need ProcessEvent - use ExecuteUbergraph or proper virtual dispatch.

Base BP has Foo(); Derived BP overrides Foo(). CallFunctionByName('Foo') runs Base's version.

Use ProcessEvent

Object->ProcessEvent(Function, Parms);

Virtual dispatch; correct override called.

Or use IInterface for polymorphism

Define interface; override per derived class. Execute_Foo dispatches correctly.

Avoid name-based dispatch

For polymorphic calls, type-based is safer. Names are convenient and brittle.

“Name-based function lookup is static. Polymorphism needs dynamic dispatch.”

If you find yourself using CallFunctionByName extensively, the design likely needs interfaces. Refactor; name-based dispatch is a smell.

Related reading