4,移动动作改为c++


要注意的是,蓝图和c++的raw ,pitch ,yaw顺序不同,蓝图的xyz是roll,pitch,yaw,C++ FRotator( Pitch, Yaw, Roll )
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
private:
//移动
void Move(const FInputActionValue& value);
void UpdateSpriteRotation(float MoveX); // <-- 新增这一行
//是否面向右边
bool bFaceRight = true; // <-- 新增这一行
};
void AMyPaperZDCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
UEnhancedInputComponent* enhancedInputComponent = CastChecked(PlayerInputComponent);
if (!enhancedInputComponent)
{
return;
}
enhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AMyPaperZDCharacter::Move);
}
bool AMyPaperZDCharacter::bCanMove()
{
return (!IsAttacking &&!IsDead);
}
void AMyPaperZDCharacter::Move(const FInputActionValue& value)
{
// 1. 不能移动就返回
if (!bCanMove())
return;
FVector2D MoveVector = value.Get<FVector2D>();
float MoveX = MoveVector.X;
float MoveY = MoveVector.Y;
// 2. 2D 移动
if (MoveX != 0.0f)
AddMovementInput(FVector(MoveX, 0, 0), 1.0f);
if (MoveY != 0.0f)
AddMovementInput(FVector(0, -1, 0), MoveY);
// 3. 翻转角色
UpdateSpriteRotation(MoveX);
}
// 功能:根据左右输入,翻转角色(和你蓝图完全一样)
void AMyPaperZDCharacter::UpdateSpriteRotation(float MoveX)
{
// 拿到我们的精灵组件(PaperZD自带的)
UPaperFlipbookComponent* SpriteComp = GetSprite();
// 如果精灵没找到,直接退出,防止报错
if (!SpriteComp) return;
// ==============================================
// 角色 朝右(按D/右箭头)
// 蓝图节点:X=-90 Y=0 Z=0
// ==============================================
if (MoveX > 0.0f)
{
bFaceRight = true; // 标记:现在面朝右
// 【重点】蓝图 X/Y/Z → 转成 C++ 旋转
// 蓝图 X = Roll
// 蓝图 Y = Pitch
// 蓝图 Z = Yaw
// C++ FRotator( Pitch, Yaw, Roll )
// 所以 → FRotator( 蓝图Y, 蓝图Z, 蓝图X )
SpriteComp->SetWorldRotation(FRotator(0, 0, -90));
}
// ==============================================
// 角色 朝左(按A/左箭头)
// 蓝图节点:X=90 Y=0 Z=180 ← 你截图这个
// ==============================================
else if (MoveX < 0.0f)
{
bFaceRight = false; // 标记:现在面朝左
// 同样套公式:FRotator(蓝图Y, 蓝图Z, 蓝图X)
SpriteComp->SetWorldRotation(FRotator(0, 180, 90));
}
}
更多推荐
所有评论(0)