我最近在编写脚本时一直在与CFrame机制合作,而我对此有些困惑。
即使使用了.lookVector
,甚至使用了Vector3
,Jetpack模型的位置也保持等于躯干的位置,而不是躯干后面的5 (* -5)
。
这是我到目前为止的代码:
local player = script.Parent
local jetpack = game.ReplicatedStorage.Jetpack
local jetpackClone = jetpack:Clone()
jetpackClone.PrimaryPart = jetpackClone.Core
jetpackClone.Parent = player
jetpackClone:moveTo(player.Torso.Position + player.Torso.CFrame.lookVector * -5)
local weld = Instance.new("Motor6D")
weld.Parent = jetpackClone.Core
weld.Part0 = jetpackClone.Core
weld.Part1 = player.Torso
答案 0 :(得分:0)
moveTo 用于没有主要部分的模型。这可能是不准确的。相反,您还使用:SetPrimaryPartCFrame()
来添加Position + CFrame(这会导致您检查输出时出错吗?)
答案 1 :(得分:0)
解决此问题的方法非常简单。
就像艾哈迈德说的那样,moveTo用于没有主要部分的模型。不仅如此。
艾哈迈德忘记的一件事是'lookVector'不是CFrame,而是Vector3。
在这个片段中,您做了
moveTo(player.Torso.Position + player.Torso.CFrame.lookVector * -5)
如果您没有在Vector3中使用数字值,那会很好。要解决此问题,您的代码应该是
local player = script.Parent
local jetpack = game.ReplicatedStorage.Jetpack;
local jetpackClone = jetpack:Clone();
jetpackClone.PrimaryPart = jetpackClone.Core;
jetpackClone.Parent = player; -- Is the 'Player' a Player, or a character??
local weld = Instance.new("Weld", player.Torso) -- We use 'Weld' here, instead of Motor6D
weld.Part1 = jetpackClone.Core;
weld.Part0 = player.Torso;
weld.C0 = CFrame.new(0, 0, -5); -- We use the C0 property of Weld's
应该将喷气背包焊接到您的躯干上。虽然,我会检查其中的CFrame是否正确,但不确定是否正确,但是如果jetpack出现在您的躯干前面,则将weld.C0 = CFrame.new(0, 0, -5)
替换为weld.C0 = CFrame.new(0, 0, 5)
。>
希望我的回答有帮助!