在这里插入图片描述
在这里插入图片描述

要注意的是,蓝图和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));
}

}

更多推荐