1.Hey im asking for help because i just want to achieve a simple lock on system that doesn’t make my camera glitch out
-
My Issue is that the camera will keep glitching noticably and whenever i get close to the humanoid im locked on with it flings me as shown in the video
2023-08-13 18-24-02 -
I havent found any solutions
local RunService = game:GetService("RunService")
local UserInput = game:GetService("UserInputService")
local LockOn = {}
local Target
local TargetDistance
local playerBody
LockOn.Info = {
Range = 100,
LockONKey = Enum.KeyCode.LeftControl, Enum.UserInputType.MouseWheel,
IsLocked = false,
LeftOffset = Vector3.new(3, 3, 6),
RightOffset = Vector3.new(5, 1, -2)
}
function LockOn.CharFound(player, Mouse)
local playerroot = player.Character.HumanoidRootPart
print(playerroot.Parent)
for i, v in pairs(game.Workspace:GetChildren()) do
if v:FindFirstChild("Humanoid") and v ~= player.Character and v:IsA("Model") then
local EnemyRoot = v.HumanoidRootPart
local EnemyHumanoid = v:WaitForChild("Humanoid")
Target = EnemyRoot
TargetDistance = (playerroot.Position - EnemyRoot.Position).Magnitude
playerBody = player
if(playerroot.Position - EnemyRoot.Position).Magnitude <= LockOn.Info.Range then
LockOn.Info.IsLocked = true
else
LockOn.Info.IsLocked = false
end
end
end
end
local Con;
local lastdt = 0
Con = RunService.Stepped:Connect(function(dt)
task.wait()
dt = (lastdt + dt)/2
lastdt = dt
if LockOn.Info.IsLocked == true and Target ~= nil then
local LockOn_Gui = playerBody.PlayerGui.LockOn
LockOn_Gui.Enabled = true
local EnemyName = LockOn_Gui.TextLabel
EnemyName.Text = Target.Parent.Name
--Camera Part
local Distance = (playerBody.Character.HumanoidRootPart.Position - Target.Position).Magnitude
print(Distance)
if Distance <= LockOn.Info.Range then
local Camera = workspace.CurrentCamera
Camera.CameraType = Enum.CameraType.Scriptable
UserInput.MouseIconEnabled = false
UserInput.MouseBehavior = Enum.MouseBehavior.Default
Camera.CFrame = CFrame.lookAt(playerBody.Character.HumanoidRootPart.Position, Target.Position ) * CFrame.new(LockOn.Info.LeftOffset)
local Direction = (playerBody.Character.HumanoidRootPart.Position - Target.Position).Unit * Vector3.new(-1, -15, -1)
local playerroot = playerBody.Character.HumanoidRootPart
playerroot.CFrame = CFrame.lookAt(playerroot.Position, playerroot.Position + Direction)
end
end
end)
return LockOn