Viewport not working correctly

Hello,
So I found this open source module by @boatbomber
It’s used for rendering the character while it walks, but I would like to fork it for my story game, so that when the value is updated, the character in the viewport changes to who is speaking.
I attempted this myself, but it didn’t work. Well, it worked the first time, but the second time, the character is still the same, also, new Speaker doesn’t print the second time for some reason.

Local Script:

local ReplicatedStorage = game:GetService('ReplicatedStorage')
local Values = ReplicatedStorage:WaitForChild('Values')
local Speaker = Values:WaitForChild('Speaker')
local RunService		= game:GetService('RunService')
local UserInputService	= game:GetService("UserInputService")

--Localize
local instance,newRay	= Instance.new,Ray.new
local v2,v3,cf,udim2	= Vector2.new,Vector3.new,CFrame.new,UDim2.new
local insert,random,abs	= table.insert,math.random,math.abs

local ValidClasses = {
	["MeshPart"] = true; ["Part"] = true; ["Accoutrement"] = true;
	["Pants"] = true; ["Shirt"] = true;
	["Humanoid"] = true;
}

local function RenderHumanoid(Model, Parent, MainModel)
	local ModelParts = Model:GetDescendants()
	for i=1, #ModelParts do
		local Part		= ModelParts[i]
		
		if ValidClasses[Part.ClassName] then
			
			local a			= Part.Archivable
			Part.Archivable	= true
			
			local RenderClone	= Part:Clone()
			Part.Archivable	= a
			
			if Part.ClassName == "MeshPart" or Part.ClassName == "Part" then
				PartUpdater = RunService.Heartbeat:Connect(function()
					if Part then
						RenderClone.CFrame = Part.CFrame
					else
						RenderClone:Destroy()
						PartUpdater:Disconnect()
					end
				end)
			elseif Part:IsA("Accoutrement") then
				PartUpdater = RunService.Heartbeat:Connect(function()
					if Part then
						if RenderClone.Handle then
							RenderClone.Handle.CFrame = Part.Handle.CFrame
						end
					else
						RenderClone:Destroy()
						PartUpdater:Disconnect()
					end
				end)
			elseif Part.ClassName == "Humanoid" then
performance issues
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.FallingDown,			false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.Running,				false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.RunningNoPhysics,	false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.Climbing,			false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.StrafingNoPhysics,	false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.Ragdoll,				false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.GettingUp,			false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.Jumping,				false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.Landed,				false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.Flying,				false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.Freefall,			false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.Seated,				false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.PlatformStanding,	false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.Dead,				false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.Swimming,			false)
				RenderClone:SetStateEnabled(Enum.HumanoidStateType.Physics,				false)
			end
			
			RenderClone.Parent = Parent
		end 
	end
end

Speaker:GetPropertyChangedSignal('Value'):Connect(function()
	
	print('new Speaker!')



	local Character			= workspace[Speaker.Value]


	--Basic setup
	local ViewPort			= script.Parent

	--Settings
	local Offset			= cf(0,1,-6)

	--Create the viewport camera
	local Camera		= instance("Camera")
		ViewPort.CurrentCamera	= Camera


	--Let the world load before starting
	--wait(1)


	local function Render()
		ViewPort:ClearAllChildren()
		--Render the character
		local Char = instance("Model")
			Char.Name = ""
			Char.Parent = ViewPort
		RenderHumanoid(Character,Char)
	end

	--Handle changes
	Character.DescendantAdded:Connect(Render)
	Character.DescendantRemoving:Connect(Render)

	--Initialize
	Render()
	
	coroutine.resume(coroutine.create(function()
		CameraUpdater = RunService.Heartbeat:Connect(function()
			if Character.HumanoidRootPart then
				Camera.CFrame =  cf(Character.HumanoidRootPart.CFrame:toWorldSpace(Offset).p, Character.HumanoidRootPart.CFrame.p)
			end
		end)
	end))
end)

I haven’t got any errors at all. Thanks for any help!

I still have this issue! Anyone know why?

1 Like