为什么 PlayerController“拥有”偏航俯仰和滚转,而角色“拥有”它的位置?

Rya*_*yan 5 c++ oop unreal-engine4

我是 UE4 的新手,正在尝试了解有关控制角色 pawn 的一些基本概念。我正在摸索着尝试实现一些角色移动逻辑。我打算使用基本的 WASD 来向前、向后、左右移动角色——就像几乎所有基本的第一人称射击游戏一样。我还希望鼠标输入来旋转角色。

我有自己的自定义PlayerControllerCharacter类。

添加代码来移动角色——正面、背面、侧面——似乎都在角色类本身中。那里有一个名为 AddMovementInput 的方法,它似乎可以为我修改位置。这也让我认为角色类“拥有”自己的位置。这是有道理的,因为一次可能有多个角色类,每个类都在不同的位置,对吧?

添加旋转字符的代码与控制旋转的方法类似 - AddControllerYawInput, AddControllerPitchInput, AddControllerRollInput。简单地查看函数的名称表明偏航俯仰和滚转由玩家控制器“拥有”。查看函数的文档和注释进一步支持这一点:“将输入(影响偏航)添加到控制器的 ControlRotation,如果它是本地 PlayerController。” 所以在我看来,偏航俯仰和滚转是玩家控制器“拥有”的值,对吗?

作为初学者,这让我感到困惑:我对位置存储在角色本身中但旋转似乎不是这样的事实感到困惑。

我有兴趣了解我应该如何“思考”角色或棋子的运动。我只是不清楚,这让我挂断了这个话题。

Rei*_*ica 8

此设计背后的意图是将控制机制角色物理分离。在编写软件方面,这个想法是游戏交互机制方面的玩家控件的旋转与游戏世界物理中角色的旋转分离。例如,我可以瞄准向上,而我的角色的身体以某种方式倾斜向下-因此可以物理碰撞位于其下方的对象。

看,您对“谁拥有什么”的观察是正确的。可以看到的是AController基类PlayerController,有一个成员变量ControlRotation类型FRotator。该数据成员的文档说:

ControlRotation(通过 GetControlRotation() 访问),确定受控 Pawn 的查看/瞄准方向......

GetControlRotation() 进一步澄清

这是完整的瞄准旋转,它 [...]可能与受控 Pawn 的旋转不同(例如,可以选择不在视觉上倾斜或滚动)。

如在,控制器旋转与角色为自己管理的任何“旋转相关”分开。

这是在文档中进一步支持,为下例如见Pawn基类ACharacter):

Pawn 是玩家或 AI 可以拥有的所有 actor 的基类。它们是关卡中玩家和生物的物理表示

和下AController

控制器是非物理角色,可以拥有 Pawn 来控制其动作。