MaterialSlot
Contains data about a material slot on a static or animated mesh.
Properties
| Property Name | Return Type | Description | Tags | 
|---|---|---|---|
| slotName | string | The name of this slot. | Read-Only | 
| mesh | CoreMesh | The mesh this MaterialSlot is on. | Read-Only | 
| materialAssetName | string | The name of the material asset in this slot. | Read-Only | 
| materialAssetId | string | The material asset in this slot. | Read-Write | 
| isSmartMaterial | boolean | True if we are using this as a smart material. | Read-Write | 
Functions
| Function Name | Return Type | Description | Tags | 
|---|---|---|---|
| SetUVTiling(number u, number v) | None | Set the U and V tiling values. | None | 
| SetUVTiling(Vector2 uv) | None | Set the U and V tiling values. | None | 
| GetUVTiling() | Vector2 | Returns a Vector2 of the U and V tiling values. | None | 
| SetColor(Color) | None | Set the color for this slot. | None | 
| GetColor() | Color | Returns the color of this slot. | None | 
| ResetColor() | None | Resets the color of this slot to the original value. | None | 
| ResetUVTiling() | None | Resets the U and V tiling to their original values. | None | 
| ResetIsSmartMaterial() | None | Resets whether or not this is used as a smart material. | None | 
| ResetMaterialAssetId() | None | Resets this to the original material asset. | None | 
| GetCustomMaterial() | CustomMaterial | Get the custom material in this material slot. This errors if the slot does not have a custom material. | Client-Only | 
Examples
Example using:
GetCustomMaterial
 In this example, the texture of a cube will scroll horizontally. For this example to work, a custom material must be assigned to the first material slot of the cube
local CUBE = script.parent
-- The amount of time in seconds that has passed
local timePassed = 0
-- Get the first material slot of the "CUBE"
local FirstMaterialSlot = CUBE:GetMaterialSlots()[1]
-- Get the Custom Material applied to this material slot
local CustomMaterial = FirstMaterialSlot:GetCustomMaterial()
function Tick(deltaTime)
    -- Update the "timePassed" with the "deltaTime" to accurately reflect how many seconds have passed
    -- since this script has started running
    timePassed = timePassed + deltaTime
    -- If more than 1 second has passed, reset "timePassed" to 0.
    -- This is done because range of the "u_offset" property is between 0 and 1
    if timePassed > 1 then
        timePassed = 0
    end
    -- Update the UV tiling property for the material slot
    CustomMaterial:SetProperty("u_offset", timePassed)  
end
See also: CustomMaterial.SetProperty | StaticMesh.GetMaterialSlots
Example using:
ResetMaterialAssetId
 In this example, the material of a static mesh will repeatedly switch between the original static mesh material and a material assigned to the "CustomMaterial" property of this script.
-- Asset reference referring to a custom material
local MATERIAL = script:GetCustomProperty("CustomMaterial")
local STATIC_MESH = script.parent
-- Get the first material slot for the static mesh
local FirstMaterialSlot = STATIC_MESH:GetMaterialSlots()[1]
function SwitchMaterials()
    FirstMaterialSlot.materialAssetId = MATERIAL
    Task.Wait(0.5)
    FirstMaterialSlot:ResetMaterialAssetId()
    Task.Wait(0.5)
end
-- Create a task that will switch the material of the "STATIC_MESH"
local switchMaterialTask = Task.Spawn(SwitchMaterials)
-- Force the "switchMaterialTask" task to repeat every 0.5 seconds
switchMaterialTask.repeatInterval = 0.5
-- Force the "switchMaterialTask" task to repeat indefinitely
switchMaterialTask.repeatCount = -1
See also: Task.Spawn
Example using:
SetColor
 In this example, a cube will flash multiple colors.
local CUBE = script.parent
-- The amount of time in seconds that has passed
local timePassed = 0
-- How quickly the "CUBE" will change color
local CHANGE_SPEED = 5
-- Get the first material slot of the "CUBE"
local FirstMaterialSlot = CUBE:GetMaterialSlots()[1]
function Tick(deltaTime)
    -- Update the "timePassed" with the "deltaTIme" to accurately reflect how many seconds have passed
    -- since this script has started running
    timePassed = timePassed + deltaTime
    -- Calculate the strength of the red, green, and blue channels using three sine waves that are 60 degrees
    -- out of phase with each other
    local redChannel = math.sin((timePassed) * CHANGE_SPEED)
    local greenChannel = math.sin((timePassed + math.pi * 1/3) * CHANGE_SPEED)
    local blueChannel = math.sin((timePassed + math.pi * 2/3) * CHANGE_SPEED)
    -- Create a new color using the red, green, and blue channels
    local newColor = Color.New(redChannel, greenChannel, blueChannel)
    -- Update the color of the first material slot
    FirstMaterialSlot:SetColor(newColor)    
end
See also: StaticMesh.GetMaterialSlots | Color.New
Example using:
isSmartMaterial
 materialAssetId
 GetColor
 SetColor
 GetUVTiling
 SetUVTiling
 In this example, the materials from one object are copied onto another object. Different object types may have different material slot names, in which case it won't copy.
local STATIC_MESH_A = script:GetCustomProperty("StaticMeshA"):WaitForObject()
local STATIC_MESH_B = script:GetCustomProperty("StaticMeshB"):WaitForObject()
function CopyMaterialSlot(slotA, slotB)
    slotB.isSmartMaterial = slotA.isSmartMaterial
    slotB.materialAssetId = slotA.materialAssetId
    slotB:SetColor(slotA:GetColor())
    slotB:SetUVTiling(slotA:GetUVTiling())
end
function CopyMaterials(meshA, meshB)
    for _,slotA in ipairs(meshA:GetMaterialSlots()) do
        local slotB = meshB:GetMaterialSlot(slotA.slotName)
        if slotB then
            CopyMaterialSlot(slotA, slotB)
        end
    end
end
CopyMaterials(STATIC_MESH_A, STATIC_MESH_B)
See also: CoreObject.GetMaterialSlot | CoreObjectReference.WaitForObject
Example using:
materialAssetId
 In this example the material of a static mesh will change during runtime by using the materialAssetId property of a material slot. This script must have an asset reference custom property named "CustomMaterial" that refers to a custom material you created.
-- Asset reference referring to a material
local MATERIAL = script:GetCustomProperty("CustomMaterial")
local STATIC_MESH = script.parent
-- Get the first material slot of the "STATIC_MESH"
local FirstMaterialSlot = STATIC_MESH:GetMaterialSlots()[1]
-- Set the material of the "FirstMaterialSlot" to the material referenced in the "CustomMaterial" custom property
FirstMaterialSlot.materialAssetId = MATERIAL
See also: StaticMesh.GetMaterialSlots
Example using:
slotName
 materialAssetName
 mesh
 In this example we scan an animated mesh and print out information about all its material slots.
local ANIM_MESH = script.parent
for i,slot in ipairs(ANIM_MESH:GetMaterialSlots()) do
    print("\nSlot "..i..":")
    print("Slot Name = "..slot.slotName)
    print("Material Name = "..slot.materialAssetName)
    print("Mesh Asset ID = "..slot.mesh.meshAssetId)
end
See also: AnimatedMesh.GetMaterialSlots | CoreMesh.meshAssetId