Skip to content


SmartObject is a top-level container for some complex objects and inherits everything from CoreObject. Note that some properties, such as collision or visibility, may not be respected by a SmartObject.


Property Name Return Type Description Tags
team integer Assigns the SmartObject to a team. Value range from 0 to 4. 0 is neutral team. Read-Write
isTeamColorUsed boolean If true, and the SmartObject has been assigned to a valid team, players on that team will see one color, while other players will see another color. Requires a SmartObject that supports team colors. Read-Write


Function Name Return Type Description Tags
GetSmartProperties() table Returns a table containing the names and values of all smart properties on a SmartObject. None
GetSmartProperty(string) value, boolean Given a property name, returns the current value of that property on a SmartObject. Returns the value, which can be an integer, number, boolean, string, Vector3, Rotator, Color, or nil if not found. Second return value is a boolean, true if the property was found and false if not. None
SetSmartProperty(string, value) boolean Sets the value of an exposed property. Value can be of type number, boolean, string, Vector3, Rotation or Color, but must match the type of the property. Returns true if the property was set successfully and false if not. None


Example using:


In this example, a script is placed as the child of a SmartObject in the hierarchy. If the object has any smart properties, those are printed out to the Event Log.

local SMART_OBJECT = script.parent

if SMART_OBJECT:IsA("SmartObject") then
    print("Smart properties for " ..
    local properties = SMART_OBJECT:GetSmartProperties()
    for key,value in pairs(properties) do
        print(key .. " = " .. tostring(value))
    print( .. " is not a Smart Object.")

See also: CoreObject.parent | Other.IsA

Example using:



In this example, we control the "Sun Light" object in the hierarchy to implement a sort of day/night cycle. We achieve this by rotating the sun object, but it's also necessary to modify the sun's color and light intensity over time.

local SUN = script.parent
local SPEED = 10

local defaultSunColor = SUN:GetSmartProperty("Light Color")
local degrees = 30

function Tick(deltaTime)
    degrees = degrees + deltaTime * SPEED
    if degrees > 360 then
        degrees = degrees - 360
    elseif degrees < 0 then
        degrees = degrees + 360

    -- 0 at midday, 1 at both horizons
    local cycle = (math.cos(math.rad((degrees+90) * 2)) * 0.5) + 0.5

    local quat = Quaternion.New(Vector3.New(0,1,0), degrees)
    SUN:SetSmartProperty("Light Color", Color.Lerp(SUNRISE_COLOR, defaultSunColor, cycle))
    SUN:SetSmartProperty("Intensity", 2 + (1.2 * cycle))

See also: CoreObject.parent | Color.PURPLE | Quaternion.New | Vector3.New

Last update: January 5, 2022