We use cookies on this site to enhance your user experience
Collapse Sidebar


The Changed event fires right after most properties change on objects. It is possible to find the present value of a changed property by using object[property]. To get the value of a property before it changes, you must have stored the value of the property before it changed.

If you are only interested in listening to the change of a specific property, consider using the GetPropertyChangedSignal method instead to get an event that only fires when a given property changes.

This event does not fire for physics-related changes, like when the CFrame, Velocity, RotVelocity, Position, Orientation and CFrame properties of a BasePart change due to gravity. To detect changes in these properties, consider using a physics-based event like RunService.Stepped or BasePart.Touched. A while-true-do loop can also work.

For “-Value” objects, this event behaves differently: it only fires when the Value property changes. See individual pages for IntValue, StringValue, etc for more information. To detect other changes in these objects, you must use GetPropertyChangedSignal instead.


Name Type Default Description

The name of the property that changed.

Code Samples

Changed Event

This sample demonstrates the subtleties of the Changed event on normal objects and “-Value” objects.

-- Demonstrate the Changed event by creating a Part
local part = Instance.new("Part")
-- This fires Changed with "Transparency"
part.Transparency = .5
-- Similarly, this fires Changed with "Number"
part.Name = "SomePart"
-- Since changing BrickColor will also change other
-- properties at the same time, this line fires Changed
-- with "BrickColor", "Color3" and "Color3uint16".
part.BrickColor = BrickColor.Red()

-- A NumberValue holds a double-precision floating-point number 
local vNumber = Instance.new("NumberValue")
-- This fires Changed with 123.456 (not "Value")
vNumber.Value = 123.456
-- This does not fire Changed
vNumber.Name = "SomeNumber"

-- A StringValue stores one string
local vString = Instance.new("StringValue")
-- This fires Changed with "Hello" (not "Value")
vString.Value = "Hello"

Change Detector

This code sample demonstrates the Changed event firing within a parent object.

local object = script.Parent
local function onChanged(property)
	-- Get the current value of the property
	local value = object[property]
	-- Print a message saying what changed
	print(object:GetFullName() .. "." .. property .. " (" .. typeof(value) .. ") changed to " .. tostring(value))
-- Trigger a simple change in the object (add an underscore to the name)
object.Name = "_" .. object.Name