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轴的跟随,

 

posted @ 2022-05-12 00:46  AFK_W  阅读(357)  评论(0)    收藏  举报