Not to sure whats happening with my code I've tried using a variable and that too didn't work. Its a season changer that changes the mesh's texture id to make the mesh appear different for a certain season. Heres my code:
if script.Summer.Value == true then script.Parent:GetChildren().Mesh.TextureId = "http://www.roblox.com/asset/?id=32323659" elseif script.Fall.Value == true then script.Parent:GetChildren().Mesh.TextureId = "http://www.roblox.com/asset/?id=100779383" elseif script.Winter.Value == true then script.Parent:GetChildren().Mesh.TextureId = "http://www.roblox.com/asset/?id=65612688" end
I have 3 Bool Values inside the script named Summer,Fall, and Winter
I'm getting the error: Workspace.Trees.Script:6: attempt to index field 'Mesh' (a nil value)
Please help
This is a common misconception with the GetChildren()
function as many users assume that by using the function it will automatically change all values of the area GetChildren was called on. This however is not the case as the GetChildren()
function always returns a table value.
In order to use the GetChildren()
function to change all values of a model or group of objects you will need to use a for loop. You will want to establish for i,v in pairs() do
. The i and v basically stand for index and value as the "in pairs" means that for every index and value together do something in the script. "v" in this case is the object that is getting the value changed.
However, due to the likelihood that the script will not have a Mesh object inside it, I would recommend naming the model something unique and moving the script out of the model.
if script.Summer.Value == true then for i,v in pairs(script.Parent:GetChildren()) do v.Mesh.TextureId = 'http://www.roblox.com/asset/?id=32323659' end elseif script.Fall.Value == true then for i,v in pairs(script.Parent:GetChildren()) do v.Mesh.TextureId = 'http://www.roblox.com/asset/?id=100779383' end elseif script.Winter.Value == true then for i,v in pairs(script.Parent:GetChildren()) do v.Mesh.TextureId = 'http://www.roblox.com/asset/?id=65612688' end end
Your problem:
GetChildren()
returns a table of objects that are the children, and you cannot access all of them by finding a child.
Do this instead:
for i,v in pairs (script.Parent:GetChildren()) do -- for loop that does the script for every child v.Name = "part" ..i end