跳到主内容
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

枚举值解释

  1. None (值:0x0) • 表示没有发生任何重要的触发状态变化,并且当前没有活动的设备输入。 • 使用了 UMETA(Hidden),在编辑器中不会显示该枚举值。
  2. Triggered (值:1 << 0,即 0x1) • 表示触发事件在一个或多个帧周期后发生。 • 对应的状态变化:ETriggerState 从 None -> Triggered,或从 Ongoing -> Triggered,或者仍然处于 Triggered -> Triggered。
  3. Started (值:1 << 1,即 0x2) • 表示触发评估刚刚开始。 • 注意:在同一帧中,Started 事件总是比 Triggered 更早触发。 • 对应的状态变化:ETriggerState 从 None -> Ongoing 或 None -> Triggered。
  4. Ongoing (值:1 << 2,即 0x4) • 表示触发正在处理中,比如某个动作需要用户按住一个键一段时间(比如长按触发),但时间阈值尚未达到时,会处于这个状态。 • 对应的状态变化:ETriggerState 从 Ongoing -> Ongoing。
  5. Canceled (值:1 << 3,即 0x8) • 表示触发被取消,比如用户在满足条件前释放了按键(例如长按触发的时间尚未达到)。 • 对应的状态变化:ETriggerState 从 Ongoing -> None。
  6. Completed (值:1 << 4,即 0x10) • 表示触发完成,比如长按的时间阈值已满足后,按键松开。 • 对应的状态变化:ETriggerState 从 Triggered -> None。 • 注意: • 如果在同一帧中某些触发仍然处于 Ongoing 状态,那么不会触发 Completed。 • 使用 Completed 事件时可能会限制你的触发规则,因此建议将不同触发规则分配到不同的动作中。

用途 • 这个枚举可以帮助处理输入动作的触发状态,从而判断用户的输入意图。 • 比如:实现按下、长按、双击等复杂的输入逻辑时,利用这些状态可以精确判断输入流程的每个阶段。

返回顶部