UEC++创建玩家和玩家移动
1,创建一个继承于Character的C++的基类,作为玩家和AI的父类
2,创建一个继承于刚刚创建的基类的一个玩家类

3,添加组件和玩家类的构造函数
添加玩家的弹簧臂和摄像机以及玩家的构造函数

在构造函数中对组件的初始化

将弹簧臂和相机绑定到不同的组件上
在虚幻编辑器中实现对事件的输入设置

在玩家类中实现对事件的逻辑函数,并且对输入事件进行绑定这些逻辑事件

在玩家类中重写继承的输入事件,SetupPlayerInputComponent
virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
并且在重写的函数中进行事件的绑定
void ALegoPlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis(TEXT("MoveForward"),this,&ALegoPlayerCharacter::MoveForward);
PlayerInputComponent->BindAxis(TEXT("MoveRight"),this,&ALegoPlayerCharacter::MoveRight);
PlayerInputComponent->BindAxis(TEXT("Turn"),this,&ALegoPlayerCharacter::Turn);
PlayerInputComponent->BindAxis(TEXT("Lookup"),this,&ALegoPlayerCharacter::Lookup);
}
在这些逻辑函数中实现人物的移动:
void ALegoPlayerCharacter::MoveForward(float Value)
{
AddMovementInput(GetActorForwardVector(),Value);
}
void ALegoPlayerCharacter::MoveRight(float Value)
{
AddMovementInput(GetActorRightVector(),Value);
}
void ALegoPlayerCharacter::Turn(float Value)
{
AddControllerYawInput(Value);
}
void ALegoPlayerCharacter::Lookup(float Value)
{
AddControllerPitchInput(Value);
}
解决因为硬件问题导致因帧率不匹配,实现的操作不公平现象:忽略时间膨胀
利用时间Tick时间里面的DeltaSeconds达到忽略时间膨胀问题。根据不同机器帧率问题达到最后操作时间一致
void ALegoPlayerCharacter::Turn(float Value)
{
AddControllerYawInput(Value*GetWorld()->GetDeltaSeconds()*50);
}
void ALegoPlayerCharacter::Lookup(float Value)
{
AddControllerPitchInput(Value*GetWorld()->GetDeltaSeconds()*50);
}
问题:人物会出现左右转视角正常,上下转视角出现问题
需要设置弹簧臂上的开启Pitch轴的跟随,


浙公网安备 33010602011771号