【问题标题】:Why does PlayerController "own" the yaw pitch and roll, but the Character "owns" its location?为什么 PlayerController “拥有” yaw pitch 和 roll,而 Character “拥有”它的位置?
【发布时间】:2019-01-31 11:18:33
【问题描述】:

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

我有自己的自定义 PlayerControllerCharacter 类。

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

添加旋转字符的代码有类似的控制旋转的方法——AddControllerYawInputAddControllerPitchInputAddControllerRollInput。简单地看一下函数的名称就表明偏航俯仰和滚动是由玩家控制器“拥有”的。查看函数的文档和 cmets 进一步支持了这一点:“将输入(影响 Yaw)添加到控制器的 ControlRotation,如果它是本地 PlayerController。” 所以在我看来, yaw pitch 和 roll 是玩家控制器“拥有”的值,对吧?

作为一个初学者,这让我很困惑:我对位置存储在角色本身中但旋转似乎没有这一事实感到困惑。

我有兴趣了解我应该如何“思考”角色或棋子的移动。我只是不清楚,这让我对这个话题感到困惑。

【问题讨论】:

  • 我只是在这里猜测,因为我从未使用过 UE4,但会不会是俯仰、偏航和滚动只是用户对角色的看法?换句话说,完全独立于角色的旋转。

标签: c++ oop unreal-engine4


【解决方案1】:

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

看,你对“谁拥有什么”的观察是正确的。 You can see 表示 AControllerPlayerController基类,有一个 ControlRotation 类型的成员变量 FRotator。该数据成员的文档说:

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

还有GetControlRotation()further clarifies

这是完整的瞄准旋转,[...] 可能与 受控 Pawn 的旋转(可能会选择不显示 例如俯仰或滚动)。

就像这样,控制器旋转与角色自己管理的任何“旋转相关”分开。

这在文档中得到了进一步的支持,例如参见PawnACharacter基类):

Pawn 是玩家可以拥有的所有 Actor 的基类 或人工智能。它们是玩家和生物的物理表征 在一个级别。

AController以下:

控制器是非物理演员,可以拥有一个Pawn来控制 它的行动。

【讨论】:

猜你喜欢
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
相关资源
最近更新 更多