As a Roblox developer, it is currently too hard / tedious to develop a recursive loop that checks throughout an entire game looking for one specific asset ID (of any kind).
edit: it was easy
If Roblox is able to address this issue, it would improve development time spent optimization specific assets, and ensure a through search throughout all hierarchies of the game.
I imagine this would be very similar to the current “Find In All Scripts” feature, but for AssetIDs
Is this only for assets that are properties of instances? You may run into issues where you have the asset stored in a config script or StringValue somewhere that will not be picked up. Is this fine?
If someone puts an asset ID into a StringValue, or even in a script (then they can use Find in all scripts to find it), I believe they understand where that asset is. Compare that to an asset that is solely in-game for visual aesthetics where it is never touched once downloaded by the client during play.
This is still a problem causing my team great distress as we try to optimize our textures, it is extremely difficult to find some textures that were not picked up in one of my loops
However, the problem still persists that sometimes assets are incredibly hard to find in the game, due to a large amounts of parts, meshparts, and unions within the same area and selecting individual items out of those is near impossible. The OP would be the next logical step in improving the developer’s ability to optimize game performance. I am looking for an engineer to say they acknowledge this as a problem, thank you.
local ID_LOOK = "000000"
local t = 0
local function Recurse(model)
local m = model:GetChildren()
for i = 1, #m do
t = t + 1
if t % 200 == 0 then
wait()
end
if m[i]:IsA("MeshPart") then
if string.match(tostring(m[i].TextureID), ID_LOOK) then
print("here it is mesh part!", m[i].Name, m[i].Parent.Name, m[i].Parent.Parent.Name, m[i].Parent.Parent.Parent.Name)
end
end
if m[i]:IsA("Decal") then
if string.match(tostring(m[i].Texture), ID_LOOK) then
print("here it is decal!", m[i].Name, m[i].Parent.Name, m[i].Parent.Parent.Name, m[i].Parent.Parent.Parent.Name)
end
end
if m[i]:IsA("Texture") then
if string.match(tostring(m[i].Texture), ID_LOOK) then
print("here it is texture!", m[i].Name, m[i].Parent.Name, m[i].Parent.Parent.Name, m[i].Parent.Parent.Parent.Name)
end
end
if m[i]:IsA("ImageLabel") then
if string.match(tostring(m[i].Image), ID_LOOK) then
print("here it is ImageLabel!", m[i].Name, m[i].Parent.Name, m[i].Parent.Parent.Name, m[i].Parent.Parent.Parent.Name)
end
end
if m[i]:IsA("ImageButton") then
if string.match(tostring(m[i].Image), ID_LOOK) then
print("here it is ImageButton!", m[i].Name, m[i].Parent.Name, m[i].Parent.Parent.Name, m[i].Parent.Parent.Parent.Name)
end
if string.match(tostring(m[i].HoverImage), ID_LOOK) then
print("here it is ImageButton hover!", m[i].Name, m[i].Parent.Name, m[i].Parent.Parent.Name, m[i].Parent.Parent.Parent.Name)
end
end
Recurse(m[i])
end
end
Recurse(workspace)
print"______________"
print"DONE workspace"
Recurse(game.ReplicatedStorage)
print"DONE ReplicatedStorage"
Recurse(game.StarterGui)
print"DONE StarterGui"
Recurse(game.ReplicatedFirst)
print"DONE ReplicatedFirst"
Recurse(game.ServerStorage)
print"DONE ServerStorage"``