UP-Viagg-io/Viagg-io/Assets/SceneProfiler/Editor/CollectMaterialsData.cs
2025-05-08 10:30:32 +02:00

102 lines
3.2 KiB
C#

using UnityEngine;
using UnityEngine.UI;
namespace SceneProfiler.Editor
{
public class CollectMaterialsData
{
private SceneProfiler _sceneProfiler;
public CollectMaterialsData(SceneProfiler sceneProfiler)
{
_sceneProfiler = sceneProfiler;
}
MaterialDetails FindMaterialDetails(Material tMaterial)
{
foreach (MaterialDetails tMaterialDetails in _sceneProfiler.ActiveMaterials)
{
if (tMaterialDetails.material == tMaterial) return tMaterialDetails;
}
return null;
}
public void CheckRenderers()
{
Renderer[] renderers = _sceneProfiler.FindObjects<Renderer>();
AddSkyboxMaterial();
foreach (Renderer renderer in renderers)
{
AddMaterialDetails(renderer);
}
}
private void AddSkyboxMaterial()
{
MaterialDetails skyMat = new MaterialDetails
{
material = RenderSettings.skybox,
isSky = true
};
_sceneProfiler.ActiveMaterials.Add(skyMat);
}
private void AddMaterialDetails(Renderer renderer)
{
foreach (Material material in renderer.sharedMaterials)
{
MaterialDetails tMaterialDetails = FindMaterialDetails(material);
if (tMaterialDetails == null)
{
tMaterialDetails = new MaterialDetails
{
material = material
};
_sceneProfiler.ActiveMaterials.Add(tMaterialDetails);
}
tMaterialDetails.FoundInRenderers.Add(renderer);
}
}
public void CheckGUIElements()
{
if (!_sceneProfiler.IncludeGuiElements) return;
Graphic[] graphics = _sceneProfiler.FindObjects<Graphic>();
foreach (Graphic graphic in graphics)
{
if (graphic.materialForRendering)
{
MaterialDetails tMaterialDetails = FindMaterialDetails(graphic.materialForRendering);
if (tMaterialDetails == null)
{
tMaterialDetails = new MaterialDetails();
tMaterialDetails.material = graphic.materialForRendering;
tMaterialDetails.isgui = true;
_sceneProfiler.ActiveMaterials.Add(tMaterialDetails);
}
tMaterialDetails.FoundInGraphics.Add(graphic);
}
}
}
public void AddMaterialDetails(Material tMaterial)
{
MaterialDetails tMatDetails = FindMaterialDetails(tMaterial);
if (tMatDetails == null)
{
tMatDetails = new MaterialDetails();
tMatDetails.instance = true;
tMatDetails.material = tMaterial;
if (!_sceneProfiler.ActiveMaterials.Contains(tMatDetails))
{
_sceneProfiler.ActiveMaterials.Add(tMatDetails);
}
}
}
}
}