偏移 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 数学的主要内容,如果未能解决你的问题,请参考以下文章