Currently, I have a bug occurring in my ledge-climbing system which makes it so when I attempt to climb on disproportional parts, my character’s position is set to the middle of the part and is far away from the ray?
Bugged GIF: https://gyazo.com/f575359d1f45e82564b18db623c91c64
Intended GIF: https://gyazo.com/4455a9db020bc00c0d6c09949bdec060
Code:
if Head.Position.Y >= WallInstance.Size.Y - 3 and Head.Position.Y <= WallInstance.Size.Y and WallInstance.Size.Y > 8 then
local Visulizer = Instance.new("Part")
Visulizer.BrickColor = BrickColor.Blue()
Visulizer.Anchored = true
Visulizer.CanCollide = false
Visulizer.Parent = workspace.GarbadgeCollector
Visulizer.Size = Vector3.new(.5,.5,.5)
Visulizer.Material = Enum.Material.Neon
local X = math.clamp(WallInstance.CFrame:ToObjectSpace(HumanoidRootPart.CFrame).Position.X, -WallInstance.Size.X / 2, WallInstance.Size.X / 2)
local Z = math.clamp(WallInstance.CFrame:ToObjectSpace(HumanoidRootPart.CFrame).Position.Z, -WallInstance.Size.Z / 2, WallInstance.Size.Z / 2)
local pos1 = nil;
local CFramePos = nil;
print(result.Normal)
if result.Normal == Vector3.new(0,0,1) or result.Normal == Vector3.new(0,0,-1) then
Visulizer.Position = WallInstance.Position + result.Normal * WallInstance.Size.Z / 2 + WallInstance.CFrame.UpVector * WallInstance.Size.Y / 2 + WallInstance.CFrame.RightVector * X
end
if result.Normal == Vector3.new(1,0,0) or result.Normal == Vector3.new(-1,0,0) then
Visulizer.Position = WallInstance.Position + result.Normal * WallInstance.Size.X / 2 + WallInstance.CFrame.UpVector * WallInstance.Size.Y / 2 + WallInstance.CFrame.LookVector * -Z
end
local distance = (HumanoidRootPart.Position - Visulizer.Position).Magnitude
local Part = Instance.new("Part")
Part.Anchored = true
Part.Transparency = 0.5
Part.Parent = workspace.GarbadgeCollector
Part.CanCollide = false
Part.Size = Vector3.new(0.1, 0.1, distance)
Part.CFrame = CFrame.lookAt(HumanoidRootPart.Position, Visulizer.Position)*CFrame.new(0, 0, -distance/2)
Part.BrickColor = BrickColor.Red()
if result.Normal == Vector3.new(1,0,0) then
CFramePos = CFrame.new(Visulizer.Position+Vector3.new(0,-2,0.4)) * CFrame.Angles(0,math.rad(45),0)
end
if result.Normal == Vector3.new(0,0,-1) then
CFramePos = CFrame.new(Visulizer.Position+Vector3.new(0,-2,0.4)) * CFrame.Angles(0,math.rad(180),0)
end
if result.Normal == Vector3.new(-1,0,0) then
CFramePos = CFrame.new(Visulizer.Position+Vector3.new(0,-2,0.4)) * CFrame.Angles(0,math.rad(-90),0)
end
if result.Normal == Vector3.new(0,0,1) then
CFramePos = CFrame.new(Visulizer.Position+Vector3.new(0,-2,0.4)) * CFrame.Angles(0,math.rad(0),0)
end
Humanoid.AutoRotate = false
HumanoidRootPart.Anchored = true
HumanoidRootPart.CFrame = CFramePos
end