UE5 三个欧拉角Roll、Picth、Yaw及FRotator

本文介绍了UE5中旋转的重要概念,包括俯仰角Pitch、偏航角Yaw和滚动角Roll,以及封装这三个欧拉角的FRotator类。FRotator常用于对外接口,方便游戏开发者进行旋转操作,而FQuat则主要用于内部实现。通过FRotator和FMatrix,可以轻松实现各种旋转操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

在游戏开发中,旋转是非常重要的操作。例如,我们可能需要将玩家角色绕Z轴旋转来实现转向、将摄像机绕Y轴旋转来实现俯仰等。在UE5.2中,我们可以使用三个欧拉角Pitch、Yaw、Roll及FRotator来实现旋转。


一、三个欧拉角Roll、Picth、Yaw

UE 向开发者提供旋转物体的方式是三个欧拉角:Roll、Picth、Yaw。Roll 是滚动角,Pitch 是俯仰角、Yaw 是偏航角。通过这三个角就能控制物体的旋转,确定一个物体的朝向。

请添加图片描述

滚动角 Roll

Roll 表示物体围绕红色 X轴 旋转的角度,范围为-180到180度。

俯仰角 Pitch

Picth 表示物体围绕绿色 Y轴 旋转的角度,范围为-90到90度。

偏航角 Yaw

Yaw 表示物体围绕蓝色 Z轴 旋转的角度,范围通常无限制。

蓝图使用图示:

在这里插入图片描述

理论上的角度范围,Roll(翻滚角)、Pitch(俯仰角)、Yaw(偏航角) 的取值范围理论上可以是 任意实数(如 -720°、1080° 等)。

但 UE5 会通过 角度归一化(Angle Normalization) 自动将角度转换到 [-180°, 180°] 或 [-90°, 90°) 的等效范围内。

例如:设置 Yaw = 450° 会被转换为 90°(450° - 360° = 90°)。

二、实际应用

角色控制:

  • Roll 通常不用于基础角色控制,但可用于特殊效果(如载具翻滚)。
  • Pitch 控制视角垂直方向(如鼠标上下移动抬头看天或低头看地)。
  • Yaw 控制角色水平旋转(如鼠标左右移动控制视角方向)。

摄像机:

  • 组合使用 Pitch 和 Yaw 实现自由视角。
  • Roll 可模拟手持摄像机的倾斜效果。

物理模拟:

  • 飞行器(飞机、无人机)需要同时控制三个角度。

三、旋转类FRotator

FRotator 是 UE 用来封装三个欧拉角 Roll 、Picth、Yaw 的类。开发者经常需要与 FRotator 打交道,就像需要和表示物体位置的 FVector 打交道一样。

FRotator 是三个欧拉角Picth、Yaw、Roll的封装类

FRotator 有三个成员变量:Picth、Yaw、Roll,正好是三个欧拉角。因此,我们可以说 FRotator 是封装三个欧拉角 Picth、Yaw、Roll 的类。FRotator类还提供了一些方便的函数,例如Add、GetForwardVector、GetRightVector等。使用这些函数可以方便地进行旋转操作。

我们可以使用以下代码创建一个FRotator对象:

FRotator Rotation(0.f, 45.f, 0.f);

上述代码表示创建一个绕Z轴旋转45度(绕自身轴旋转,如原地转向)的FRotator对象。我们可以使用以下代码将一个Actor绕Z轴旋转45度:

Actor->SetActorRotation(Rotation);

除了SetActorRotation函数外,还有其他函数可以设置旋转。例如,我们可以使用以下代码将一个摄像机绕Y轴旋转:

Camera->SetWorldRotation(FRotator(45.f, 0.f, 0.f));

上述代码表示创建一个绕Y轴旋转45度(歪头旋转)的FRotator对象,并将摄像机的世界旋转设置为该FRotator对象。

FRotator 多用于对外接口,FQuat 多用于内部实现

在游戏引擎内部,通常使用四元数来表示旋转,因为四元数能轻易地串接旋转以及进行旋转插值。UE 也不例外。在 UE 内部,使用 FQuat 表示四元数,并用来进行旋转计算。但是四元数并不容易直观理解,在一点上不如欧拉角。为了平衡这一矛盾,UE 就多使用 FRotator 对外提供接口,而 FQuat 多用于实现 UE 内部的功能。换言之,游戏开发者多关注 FRotator,而引擎开发者更注重 FQuat。FRotator 与 FQuat 之间的关系,可以概括为 FRotator 多用于对外接口,FQuat 多用于内部实现,且二者之间可以相互转换。

使用FRotator类可以非常方便地进行旋转操作。例如,我们可以使用以下代码将一个Actor绕Z轴旋转90度:

FRotator Rotation(0.f, 90.f, 0.f);
Actor->SetActorRotation(Rotation);

除了使用FRotator类外,我们还可以使用旋转矩阵来进行旋转操作。在UE5.2中,我们可以使用FMatrix类来表示旋转矩阵。FMatrix 类包含一个3x3的矩阵,表示三个轴的旋转矩阵。

使用 FMatrix 类可以进行更加复杂的旋转操作。例如,我们可以使用以下代码将一个Actor绕任意轴旋转:

FVector Axis(1.f, 1.f, 0.f);
float Angle = 45.f;
FMatrix Rotation = FMatrix::MakeRotationAxis(Axis, FMath::DegreesToRadians(Angle));
Actor->SetActorTransform(FTransform(Rotation, Actor->GetActorLocation()));

在上面的代码中,我们使用FMatrix::MakeRotationAxis函数创建了一个绕任意轴旋转的矩阵,并将其应用到了Actor上。

总结

在UE5.2中,使用三个欧拉角Pitch、Yaw、Roll及FRotator可以非常方便地进行旋转操作。无论是实现玩家角色的转向、摄像机的俯仰还是其他旋转操作,都可以使用FRotator类轻松实现。我们可以使用FRotator类和FMatrix类来实现旋转操作。无论是简单的绕单个轴旋转,还是复杂的绕任意轴旋转,都可以通过这两个类来实现。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一碗情深

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值