Pointer as parameter for FTimerDelegate

Well State is in ABaseCharacter right? or else you want to use different states you can already access state in actor and function will be called on correct object (thats why you using “this” in first argument of bind, it a object that function will be called on), if not send State (which already is the pointer) and modify variables from state, it will definitely be more safer then using float pointers. If you mean you want to use it elsewhere with different variables out side of State, then maybe try using interface? Or maybe use common base class for State.

C++ allows you to create function pointer variable which points to function in the code, same as standard pointer it has memory address to function code (in CPU machine code) which you can later call on. UE4 use those to bind functions in to delegates, which i showed you example with BindUObject and this is what you should use in C++. If you make mistake with function name this way compiler will catch the error.

You can’t do that with blueprint functions, because they exist only in virtual machine not CPU machine code and can be only point via reflection system, in order to use function pointer you need to have function in native code (C++). So to make delegates work with blueprints (which is needed for event dispatchers to work, that plugs blueprint functions and events in to delegates in C++) you need to point in to reflection system and thats what BindUFunction is for. BindUFunction will work with C++ functions too because they also exist in reflection system if put UFUNCTION() above them. Since you have your function inside C++, using BindUFunction on C++ function is just wasteful, since it takes more instruction for engine to find function first by name and then call.

Remember ot check logs, we still don’t really know what is the cause of crash