Roblox CFrame lookVector не является движущейся частью?
Недавно я много работал с механикой 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
2 ответа
Способ исправить это довольно просто.
Как сказал Ахмад, 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 в нем, я не уверен, если это так или нет, но если реактивный ранец появляется перед туловищем, тогда замените weld.C0 = CFrame.new(0, 0, -5)
в weld.C0 = CFrame.new(0, 0, 5)
,
Надеюсь, мой ответ поможет!
moveTo используется для моделей, которые не имеют первичной части. Который может быть неточным. Вместо этого используйте :SetPrimaryPartCFrame()
также вы добавляли Position+CFrame(это могло вызвать ошибку, вы проверяли вывод?)