同步系列12-武器瞄准后不同动画状态下的速度同步


实现在奔跑、行走、下蹲三种状态下,举起武器瞄准和放下武器移动六种速度的切换和同步。先设置好六种速度。

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来查看角色当前的速度

image-20230502123344145

随后运行游戏

行走未举枪

image-20230502123418918

//行走举枪

image-20230502123436001

//冲刺未举枪

image-20230502123559858

//冲刺举枪

image-20230502123617208

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


  目录