Files
JJBB/Assets/Project/Script/Shader/Editor/MaterialAlphaHubEditor.cs
2024-08-23 15:49:34 +08:00

60 lines
2.4 KiB
C#

using UnityEditor;
using UnityEngine;
using MaterialAlphaData = MaterialAlphaHub.MaterialAlphaData;
using PropertyAlphaData = MaterialAlphaHub.PropertyAlphaData;
using RendererAlphaData = MaterialAlphaHub.RendererAlphaData;
[CustomEditor(typeof(MaterialAlphaHub))]
public class MaterialAlphaHubEditor : Editor
{
private MaterialAlphaHub _target;
private void OnEnable()
{
_target = (MaterialAlphaHub) target;
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if (GUILayout.Button("Set Renderer Data", GUILayout.Width(200f)))
SetRendererData();
}
private void SetRendererData()
{
var renderers = _target.GetComponentsInChildren<Renderer>(true);
var rendererDatas = new RendererAlphaData[renderers.Length];
for (var i = 0; i < renderers.Length; i++)
{
var renderer = renderers[i];
var rendererInfo = new RendererAlphaData {renderer = renderer};
rendererDatas[i] = rendererInfo;
var materialDatas = new MaterialAlphaData[renderer.sharedMaterials.Length];
for (var j = 0; j < materialDatas.Length; j++)
{
var sharedMaterial = renderer.sharedMaterials[j];
if (sharedMaterial != null)
{
var materialInfo = new MaterialAlphaData();
materialDatas[j] = materialInfo;
var shader = sharedMaterial.shader;
var propertyCount = ShaderUtil.GetPropertyCount(shader);
for (var k = 0; k < propertyCount; k++)
{
var propertyType = ShaderUtil.GetPropertyType(shader, k);
if (propertyType == ShaderUtil.ShaderPropertyType.Color)
{
var propertyName = ShaderUtil.GetPropertyName(shader, k);
var color = sharedMaterial.GetColor(propertyName);
var propertyInfo = new PropertyAlphaData{name = propertyName, alpha = color.a};
materialInfo.parameterList.Add(propertyInfo);
}
}
}
rendererInfo.materialDatas = materialDatas;
}
}
_target.rendererAlphaDatas = rendererDatas;
EditorUtility.SetDirty(_target);
}
}