自定义的类型想要在蓝图上通过IA的方式进行输入调用函数,直接蓝图上IA_节点不会触发,在userwidget 上IA_ 节点会生效
UI 上绑定IA 是在UUserWidget 的NativeOnInitialized 函数中
UInputDelegateBinding::BindInputDelegates(GetClass(),PC->InputComponent,this);
把当前对象的蓝图IA 绑定事件注册到输入组件中
蓝图上IA_ 每个事件会生成一个输入绑定的对象,在BindInputDelegates 中遍历这些IA 进行BindAction 绑定
UEnhancedPlayerInput::EvaluateInputDelegates 里面负责输入事件管理
Enhanced 会存储按键状态数据,每帧根据按键变化触发事件,记录要触发的IA_Action
InputComponentStack 负责栈式管理输入组件,如果一个组件消费事件,就不会往下层传递。
遍历绑定的数据,判断是否有Action事件,有就调用绑定的对象的委托函数
注意:
UInputDelegateBinding::BindInputDelegatesWithSubobjects (Actor, InputComponent)
这个函数绑定的委托是绑定Actor 蓝图上的IA到 InputComponent->GetOwner 上。如果Owner 不是Actor 类型会导致事件无法触发
绑定的话底层其实就是记录对象和函数名,通过方式调用具体的函数,如果类型上没有函数会无法执行成功。
DebugKey 的绑定方法是在 UInputDebugKeyDelegateBinding::BindToInputComponent