Hey everyone, I’m having some issues with rendering my character in a viewport frame. I’d like it to look smooth, although for some reason it looks extremely choppy. I followed a tutorial on youtube to get it in the current state.
robloxapp-20220403-1457112.wmv (1.6 MB)
This is what it looks like.
Here is what it looks like in the explorer.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RemoteEvents = ReplicatedStorage:WaitForChild("RemoteEvents")
local RunService = game:GetService("RunService")
local TimeFunction = RunService:IsRunning() and time or os.clock
local viewportFrame = script.Parent:WaitForChild("ViewportFrame")
local running = script.Parent:WaitForChild("Running")
local modelName = script.Parent:WaitForChild("ModelName")
local gameWorkspace = game:GetService("Workspace")
local currentModel = nil
local cam = Instance.new("Camera", script.Parent)
local elapsedTime = 0
local rate = 1 / 60 -- 30 times a second
local function modifyViewport(currentModel, deltaTime)
local model = viewportFrame:FindFirstChild("Model")
if(model) then
model:Destroy()
end
local newModel = Instance.new("Model")
newModel.Name = "Model"
newModel.Parent = viewportFrame
-- Replaces with current model
for i,v in pairs(currentModel:GetChildren()) do
local v2 = v:Clone()
if(v2:IsA("Script") or v2:IsA("LocalScript") or v2:IsA("ModuleScript")) then
v2:Destroy()
else
v2.Parent = newModel
if(v2:IsA("Humanoid")) then
v2.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
end
end
end
viewportFrame.CurrentCamera = cam
cam.CFrame = ((currentModel.PrimaryPart.CFrame * CFrame.Angles(math.rad(15),math.rad(180),0)) * CFrame.new(0,1,4)) + cam.CFrame.LookVector * deltaTime
end
game:GetService("RunService").RenderStepped:Connect(function(deltaTime)
elapsedTime += deltaTime
rate = 60 / (1/deltaTime) * 0.01
if(running.Value) then
local currentModel = gameWorkspace:FindFirstChild(modelName.Value) or gameWorkspace.NPCs:FindFirstChild(modelName.Value)
if(currentModel) then
local success, errorMessage = pcall(function()
if elapsedTime >= rate then
modifyViewport(currentModel, deltaTime)
elapsedTime -= rate
end
end)
if not success then
warn(errorMessage)
running.Value = false
end
else
running.Value = false
end
end
end)
Here is the script that runs it.
What can I do to fix this? I’ve been trying to mess around with delta time to see if that would fix the issue, although I’m not sure exactly what I’m doing to be honest.
Thanks!