实现在奔跑、行走、下蹲三种状态下,举起武器瞄准和放下武器移动六种速度的切换和同步。先设置好六种速度。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| UPROPERTY(BlueprintReadWrite,EditAnywhere, Category = "Speed") float RunSpeed = 437.5f;*
UPROPERTY(BlueprintReadWrite,EditAnywhere, Category = "Speed") float RunAimSpeed = 337.5f;*
UPROPERTY(BlueprintReadWrite,EditAnywhere, Category = "Speed") float WalkSpeed = 210.f;*
UPROPERTY(BlueprintReadWrite,EditAnywhere, Category = "Speed") float WalkAimSpeed = 180.f;*
UPROPERTY(BlueprintReadWrite,EditAnywhere, Category = "Speed") float CrouchSpeed = 180.f;*
UPROPERTY(BlueprintReadWrite,EditAnywhere, Category = "Speed") float CrouchAimSpeed = 150.f;*
|
然后是瞄准的按键输入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| void ABlasterCharacter::InputAimingPressed(const FInputActionValue& InputValue) { if (CombatComp) { CombatComp->SetAiming(true);
} }
void ABlasterCharacter::InputAimingReleased(const FInputActionValue& InputValue) { if (CombatComp) { CombatComp->SetAiming(false); } }
|
之后是跳转到CombatComp组件中进行控制:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| void UCombatComponent::SetAiming(bool bIsAiming) { bAiming = bIsAiming; ServerSetAiming(bAiming); if(Character && bAiming) { if(Character->GetIsCrouch()) { Character->GetCharacterMovement()->MaxWalkSpeedCrouched = Character->GetCrouchAimSpeed(); } else { Character->GetCharacterMovement()->MaxWalkSpeed = Character->GetIsRunning() ? Character->GetRunAimSpeed() : Character->GetWalkAimSpeed(); } } else if(Character && !bAiming) { if (Character->GetIsCrouch()) { Character->GetCharacterMovement()->MaxWalkSpeedCrouched = Character->GetCrouchSpeed(); } else { Character->GetCharacterMovement()->MaxWalkSpeed = Character->GetIsRunning() ? Character->GetRunSpeed() : Character->GetWalkSpeed(); } } }
void UCombatComponent::ServerSetAiming_Implementation(bool bIsAiming) { bAiming = bIsAiming; if (Character && bAiming) { if (Character->GetIsCrouch()) { Character->GetCharacterMovement()->MaxWalkSpeedCrouched = Character->GetCrouchAimSpeed(); } else { Character->GetCharacterMovement()->MaxWalkSpeed = Character->GetIsRunning() ? Character->GetRunAimSpeed() : Character->GetWalkAimSpeed(); } } else if (Character && !bAiming)不再瞄准了 { if (Character->GetIsCrouch())在下蹲 { Character->GetCharacterMovement()->MaxWalkSpeedCrouched = Character->GetCrouchSpeed(); } else { Character->GetCharacterMovement()->MaxWalkSpeed = Character->GetIsRunning() ? Character->GetRunSpeed() : Character->GetWalkSpeed(); } } }
|
然后我们在蓝图中看一下角色的速度是否会跟着发生改变。可以在蓝图中写一个函数连接tick来查看角色当前的速度

随后运行游戏
行走未举枪

//行走举枪

//冲刺未举枪

//冲刺举枪

下蹲的就不截图了,可以看得出来功能是正常的。