双模型FPS学习


2023年3月20日22:47:36

1.增强输入绑定,实现移动旋转

过程见我的博客

2.实现鼠标旋转摄像机

要么蓝图里把这两项开了

image-20230320225153076

要么C++里Character的SetupPlayerInputComponent函数里加上:

1
2
3
//使用控制器控制旋转pitch和yaw
bUseControllerRotationPitch = true;
bUseControllerRotationYaw = true;

3.实现玩家跳跃功能

动画蓝图中创建IsAir布尔变量,然后如图设置

image-20230320225813630

此为跳跃的条件

image-20230320225855391

4.第三人称动画导入,动画重定向

从blaster项目里拷的ik和rtg文件,稍微改下就能用,还好都是标准模型,动画也可以直接重定向往上套。但是

动画有问题,需要去商城重下初学者内容包,回头替换,这动画绝逼被我搞坏了。

image-20230320225945821

5.创建动画蓝图和BlendSpace

image-20230320230816301

动画有问题,需要替换

6.RPC问题的解决,实现shift服务器客户端同步速度

按shift设置角色速度降低,松开shift恢复速度,但是速度是写在Character Movement Component组件里的,该组件的网络同步需要自己设置。此处在客户端调用服务端函数,实现客户端和服务端最大移动速度属性的统一,避免因属性不统一,客户端不断被服务端纠正而造成的卡顿。

实现如下:

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
void AFPSBaseCharacter::LowSpeedWalk(const FInputActionValue& InputValue)
{
GetCharacterMovement()->MaxWalkSpeed = 300.f;
ServerLowSpeedWalk();
}

void AFPSBaseCharacter::NormalSpeedWalk(const FInputActionValue& InputValue)
{
GetCharacterMovement()->MaxWalkSpeed = 450.f;
ServerNormalSpeedWalk();
}

void AFPSBaseCharacter::ServerLowSpeedWalk_Implementation()
{
GetCharacterMovement()->MaxWalkSpeed = 300.f;
}

bool AFPSBaseCharacter::ServerLowSpeedWalk_Validate()
{
return true;
}

void AFPSBaseCharacter::ServerNormalSpeedWalk_Implementation()
{
GetCharacterMovement()->MaxWalkSpeed = 450.f;
}

bool AFPSBaseCharacter::ServerNormalSpeedWalk_Validate()
{
return true;
}

7.导入玩家第一人称手臂动画蓝图及混合空间

这是第一人称武器的动画蓝图设置

image-20230320230300448

注意参数复用和这里有问题的动画

image-20230320230356652


文章作者: John Doe
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 John Doe !
  目录