I made a script that makes a NPC walk and face a player at the same time. The problem is that I set the NPC's torso's CFrame to make them face the player, effectively freezing them in place for a moment. Any suggestions?
Here's my script:
Problematic line resides on line 22. I tried setting the NPC's CFrame less often to try to combat the freezing, but it ended up making it look worse.
local Players = game:GetService("Players")
local Humanoid = script.Parent:WaitForChild("Humanoid")
local ParentHumanoidRootPart = script.Parent:WaitForChild("HumanoidRootPart")
local OriginalPosition = ParentHumanoidRootPart.Position
local Torso = script.Parent:WaitForChild("Torso")
local Repeat = 0
while wait(0.1) do
if Humanoid.Health > 0 then
for i,v in pairs(Players:GetChildren()) do
if v.Character and v.Character:FindFirstChild("HumanoidRootPart") then
local HumanoidRootPart = v.Character:FindFirstChild("HumanoidRootPart")
if HumanoidRootPart and ParentHumanoidRootPart then
if (HumanoidRootPart.Position - ParentHumanoidRootPart.Position).Magnitude < 30 and (HumanoidRootPart.Position - OriginalPosition).Magnitude < 35 then
Humanoid.AutoRotate = false
Humanoid:MoveTo(HumanoidRootPart.Position - CFrame.new(ParentHumanoidRootPart.Position, HumanoidRootPart.Position).LookVector * 10)
--script.Parent:SetPrimaryPartCFrame(CFrame.new(ParentHumanoidRootPart.Position, Vector3.new(HumanoidRootPart.Position.X, ParentHumanoidRootPart.Position.Y, HumanoidRootPart.Position.Z)))
--Torso.CFrame = CFrame.new(Torso.Position, Vector3.new(HumanoidRootPart.Position.X, Torso.Position.Y, HumanoidRootPart.Position.Z))
Repeat = Repeat + 1
if Repeat == 5 then
Repeat = 0
Torso.CFrame = CFrame.new(Torso.Position, Vector3.new(HumanoidRootPart.Position.X, Torso.Position.Y, HumanoidRootPart.Position.Z))
end
else
Humanoid.AutoRotate = true
Humanoid:MoveTo(OriginalPosition)
end
end
end
end
end
end
