60 lines
2.4 KiB
C#
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);
|
|
}
|
|
} |