I have researched alot and alot for a simple problem, how can I make a welded part (assigned as part1 in this weld we are talking about) face to a position? Basically how can I create CFrame.lookat()/CFrame.new(pos,lookat) with C0? because when I try these on C0 lets say it gets wacky (and also doesnt work) so if you have any resources or examples, it would be really useful, thanks.
You could probably use cframe:ToObjectSpace and the other like CFrame methods. Here’s a good starting point:
To make a welded part face a specific position, you can use the CFrame.lookAt
method to create a CFrame
that represents the orientation you want the part to have. This method takes two arguments: the position of the part, and the position you want the part to face. You can then use this CFrame
to set the part’s CFrame
property, which will orient the part as desired.
Here’s an example of how you could use CFrame.lookAt
to orient a welded part:
-- Define the position of the welded part
local partPosition = CFrame.new(0, 0, 0)
-- Define the position you want the part to face
local lookAtPosition = CFrame.new(1, 0, 0)
-- Create a CFrame that represents the orientation you want the part to have
local partCFrame = CFrame.lookAt(partPosition, lookAtPosition)
-- Set the part's CFrame to the calculated CFrame
part1.CFrame = partCFrame
If you want to use a CFrame.new
method with a C0
value, you can do so by specifying the C0
value as the second argument to the CFrame.new
method. Here’s an example of how you could use CFrame.new
with a C0
value:
-- Define the position of the welded part
local partPosition = CFrame.new(0, 0, 0)
-- Define the position you want the part to face
local lookAtPosition = CFrame.new(1, 0, 0)
-- Create a CFrame that represents the orientation you want the part to have, using a C0 value
local partCFrame = CFrame.new(partPosition, lookAtPosition, C0)
-- Set the part's CFrame to the calculated CFrame
part1.CFrame = partCFrame
I hope this helps!
I tried to explain in my tutorial, but its not that good, too much words.
Tl;DR gotta CFrame inverse or to object space as @7z99 said to rearrange the weld equation.
When you say it acts wonky, what do you mean exactly?
Is the welded Part always pointing the same direction, but not at the direction you want it to? You may have to add or subtract 90 degrees to an X,Y or Z angle to get the right face looking at the target.
Does it move, but not face the correct orientation? It might be as others have stated it might be an Object space/World space issue.
Does it face the right direction, but when you get to 90 degrees it starts reacting differently? Gimbal lock is a term that describes when an object is rotated 90 degrees so two of the axes are now aligned.
I did use that while setting the original C0 position of the part but I just cant make it face to the given position
that is exactly what I tried as I even specified but… how do I say it? it turned out weird as you can see it doesnt rotat to above like 180 degree and it just overall wacky from what you can see
@scottifly
Could you show what you tried?
please specify if I should send a recording of it (I already have done) or send the script
Please send the script you tried.
game.Lighting.Charge.OnServerEvent:Connect(function(plr,bool)
print(bool)
if plr.Character.Charges.Value == 0 then
if plr.Character:FindFirstChild("ChargeHolders") then else
if bool == true then
plr.Character.Charging.Value = true
while task.wait(3) do
plr.Character.Charges.Value+=1
print("yes?")
if plr.Character.Charging.Value == false then
break
end
end
end
end
end
if not plr.Character:FindFirstChild("ChargeHolders") then
print("woah charge done")
if bool == false then
plr.Character.Charging.Value=false
if plr.Character.Charges.Value ~= 0 then
local g = 1/plr.Character.Charges.Value
local folda = Instance.new("Folder", plr.Character)
local weldsfolda = Instance.new("Folder",plr.Character)
--local thingss = Instance.new("Attachment",plr.Character.HumanoidRootPart)
folda.Name="ChargeHolders"
weldsfolda.Name="WeldsFolder"
local N = false
local amt = 0
for i = 0,1,g do
if i ~= 0 then
local V = nil
amt +=1
if N == false then
V = game.Lighting.BlackCursor:Clone()
else
V = game.Lighting.WhiteCursor:Clone()
end
N = not N
V.Parent=folda --RightVector
print(i)
local pcf = plr.Character.HumanoidRootPart.CFrame --pcf.UpVector*((plr.Character.Charges.Value)*1.5)
V.CFrame = pcf + pcf.UpVector*((plr.Character.Charges.Value)*1.5)+ (pcf.UpVector*(math.cos(math.rad(360*i))*(plr.Character.Charges.Value*1.5)))+(pcf.RightVector*(math.sin(math.rad(360*i))*(plr.Character.Charges.Value*1.5)))+pcf.LookVector*-5
local weld = Instance.new("Weld")
local thingish = plr.Character.HumanoidRootPart.CFrame:ToObjectSpace(V.CFrame)
weld.Parent=weldsfolda
weld.C0 = thingish
weld.Part0=plr.Character.HumanoidRootPart
weld.Part1=V
local H = workspace["Retro Gun shot (Lowered)"]:Clone()
H.Parent=workspace
game:GetService("Debris"):AddItem(H,5)
H:Play()
V.Name= amt
weld.Name = amt
end
end
task.spawn(function()
while task.wait() do
if not plr.Character:FindFirstChild("ChargeHolders") then
break
end
local success, errore = pcall(function()
local mouse = game.Lighting.GetMousePos:InvokeClient(plr)
for i,_ in pairs(weldsfolda:GetChildren()) do
local v = weldsfolda:FindFirstChild(i)
--*local n = folda:FindFirstChild(i)
local L = CFrame.new(v.C0.Position, mouse).LookVector
--print(L)
--n.CFrame = CFrame.lookAt(n.CFrame.Position,mouse)
end
end)
if not success then
warn(errore)
end
end
end)
end
end
end
end)
Try:
local cf = CFrame.lookAt(arrow.Position, mouse)
weld.C0 = rootPart.CFrame:ToObjectSpace(cf)
is rootpart supposed to be humanoidrootpart? just making sure… sorry if I’m asking too many questions (I assume that the arrow is one of the attack part)
rootPart is the humanoid root part, yeah, arrow is the attack part I believe, the things that should be pointing towards the cursor.
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.