Documentation
1. 输入绑定.md
2025/12/16预计阅读 3 分钟
按键绑定
在ACharacter中定义UInputAction
表示跳的操作,这个要在蓝图中设置才能生效,默认空指针
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
UInputAction* MyJumpAction;
实现输入绑定函数SetupPlayerInputComponent
// 调用将功能绑定到输入
virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
实现逻辑,添加输入上下文映射,默认玩家0
if (const APlayerController* PlayController = Cast<APlayerController>(GetController()))
{
if (const auto SubSystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(
PlayController->GetLocalPlayer()))
{
SubSystem->AddMappingContext(MyDefaultMappingContext, 0);
}
}
将按键绑定到函数
if (UEnhancedInputComponent* InputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent))
{
InputComponent->BindAction(MyJumpAction, ETriggerEvent::Completed, this, &ACharacter::StopJumping);
}
触发事件
枚举类型: ETriggerEvent
枚举值解释
- None (值:0x0) • 表示没有发生任何重要的触发状态变化,并且当前没有活动的设备输入。 • 使用了 UMETA(Hidden),在编辑器中不会显示该枚举值。
- Triggered (值:1 << 0,即 0x1) • 表示触发事件在一个或多个帧周期后发生。 • 对应的状态变化:ETriggerState 从 None -> Triggered,或从 Ongoing -> Triggered,或者仍然处于 Triggered -> Triggered。
- Started (值:1 << 1,即 0x2) • 表示触发评估刚刚开始。 • 注意:在同一帧中,Started 事件总是比 Triggered 更早触发。 • 对应的状态变化:ETriggerState 从 None -> Ongoing 或 None -> Triggered。
- Ongoing (值:1 << 2,即 0x4) • 表示触发正在处理中,比如某个动作需要用户按住一个键一段时间(比如长按触发),但时间阈值尚未达到时,会处于这个状态。 • 对应的状态变化:ETriggerState 从 Ongoing -> Ongoing。
- Canceled (值:1 << 3,即 0x8) • 表示触发被取消,比如用户在满足条件前释放了按键(例如长按触发的时间尚未达到)。 • 对应的状态变化:ETriggerState 从 Ongoing -> None。
- Completed (值:1 << 4,即 0x10) • 表示触发完成,比如长按的时间阈值已满足后,按键松开。 • 对应的状态变化:ETriggerState 从 Triggered -> None。 • 注意: • 如果在同一帧中某些触发仍然处于 Ongoing 状态,那么不会触发 Completed。 • 使用 Completed 事件时可能会限制你的触发规则,因此建议将不同触发规则分配到不同的动作中。
用途 • 这个枚举可以帮助处理输入动作的触发状态,从而判断用户的输入意图。 • 比如:实现按下、长按、双击等复杂的输入逻辑时,利用这些状态可以精确判断输入流程的每个阶段。