偏移CFrame Math

所以,为了我的FPS框架,我想要制作自动化的瞄准,即不使用动画。

问题在于我必须移动:

  • 手臂
  • 武器 但是我不能在不将手臂焊接到武器的情况下进行移动,但我需要将手臂焊接到RootPart上。

因此,我拿起一个机架开始尝试实验,并想出了一个解决方案!

-一个锚定的零件将被视为相机(这仅用于测试目的) -RootPart将焊接到CameraPart -将定义相机位置以让玩家感觉像在瞄准的AimPart。

然后我想出了这个

local AimPartPosition = (Camera.CFrame:inverse() * AimPart.CFrame).Position
CamWeld.C0 = CamWeld.C0 * CFrame.new(Vector3.new(-AimPartPosition.X,-AimPartPosition.Y,-AimPartPosition.Z))

在这里,我得到了AimPart相对于CameraPart的偏移量,然后反向位置,最后将其应用于RootPart到CameraPart的偏移量。(我添加“.Position”的原因是因为我只想反转Position而不是Rotation,这样更安全)。

这很有效,我为自己感到骄傲,但我觉得不需要使用额外的CameraPart。我想使用原始的CFrame值而不是Motor6Ds。

这显然行不通....

local AimPartPosition = (Camera.CFrame:inverse() * AimPart.CFrame).Position
RootPart.CFrame = Camera.CFrame:inverse() * RootPart.CFrame * CFrame.new(Vector3.new(-AimPartPosition.X,-AimPartPosition.Y,-AimPartPosition.Z))

因为

RootPart.CFrame ~= Camera.CFrame:inverse() * RootPart.CFrame

我有所需的偏移量,只是不知道如何应用。

原文链接 https://stackoverflow.com/questions/69865056

点赞
stackoverflow用户16665626
stackoverflow用户16665626
RootPart.CFrame = RootPart.CFrame * CFrame.new(Vector3.new(-AimPartPosition.X,-AimPartPosition.Y,-AimPartPosition.Z))

这感觉就像作弊一样,老实说。

2021-11-06 15:44:47