偏移 CFrame 数学

Posted

技术标签:

【中文标题】偏移 CFrame 数学【英文标题】:Offset CFrame Math 【发布时间】:2021-12-20 04:56:33 【问题描述】:

因此,对于我的 FPS 框架,我想制作自动化的 Aim Downs Sights,即不使用动画。

问题是我必须移动:-

武器 武器 但是如果不将手臂焊接到武器上,我就无法做到这一点,但我需要将手臂焊接到 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))

这里,我从CameraPart得到AimPart的偏移量,然后反转位置,最后将RootPart的偏移量应用到CameraPart。(我之所以放.Position是因为我只想反转Position而不是旋转,只是为了安全起见)。

这很好用,我很自豪我做到了,但我不想使用额外的 CameraPart。我想使用 RAW 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

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

【问题讨论】:

【参考方案1】:
RootPart.CFrame = RootPart.CFrame * CFrame.new(Vector3.new(-AimPartPosition.X,-AimPartPosition.Y,-AimPartPosition.Z))

那感觉就像在作弊,我会诚实的。

【讨论】:

以上是关于偏移 CFrame 数学的主要内容,如果未能解决你的问题,请参考以下文章

确定偏移圆弧的中心点

计算给定球体上扭曲椭圆的偏移量

Flutter根据偏移量转换角度 Offset 的使用实例

Flutter根据偏移量转换角度 Offset 的使用实例

EXCEL函数中OFFSET表达的是啥意思

什么是偏移量 怎么计算