Hunger bar wont deplete

so my hunger system works but the bar in the gui dosnt go down pretty sure its because of the value changed event and ive even made a new variable for it but that didnt work heres the error

  Players.Roastdbacon.PlayerGui.PlayersHud.Hunger.Meter.LocalScript:8: attempt to index number with 'Changed'
local frame = script.Parent
local character = game:GetService("Players").LocalPlayer.character
local player = game.Players.LocalPlayer
local human = player.character:WaitForChild("Humanoid")
local hunger = player.NonPvPStats:WaitForChild("Hunger")
local hungerValue = hunger.Value

hungerValue.Changed:Connect(function()
	frame:TweenSize(UDim2.new(0,hunger.Value / 100,1,0),Enum.EasingDirection.Out,Enum.EasingStyle.Sine)
end)

while true do 
	if hunger.Value == 0 then
		--stops play from sprinting
		--reduces players regen
		wait(5)
	else
		hunger.Value = hunger.Value - 1
		wait(5)
	end
end

If hunger is your IntValue,
do hunger.Changed instead of hungerValue.Changed.
This event applies to Values, not numbers.

The error tells you that there isn't such a thing as .Changed in a number

Example:
You should do:

local hunger = nil -- Path to the IntValue
hunger.Changed:Connect(function()
    --Your code here
end)

And not do:

local hunger = nil -- Path to the IntValue
local val = hunger.Value -- a number
val.Changed:Connect(function()
    --Your code here
end)
--This example is wrong

ok so i used GetPropertyChangedSignal and that worked but now i need help on making the things that will happen once the player has no hunger you got any idea how to disable a script or change a players regen speed?

how do i define this

local sprintScript = player.StarterPlayer.StarterCharacterScripts.Sprint

player scripts