Skip to content

Instantly share code, notes, and snippets.

@sugi-cho
Last active July 16, 2021 18:59
Show Gist options
  • Save sugi-cho/5946911 to your computer and use it in GitHub Desktop.
Save sugi-cho/5946911 to your computer and use it in GitHub Desktop.
show material's property in inspector in Unity use this function in Custom Editor Class.
void ShowMaterialEditor(Material[] ms){
for(int i = 0; i < ms.Length; i++){
Material m = ms[i];
if(m == null)
return;
Shader s = m.shader;
EditorGUILayout.LabelField(m.name);
EditorGUI.indentLevel++;
for(int j = 0; j < ShaderUtil.GetPropertyCount(s); j++){
string propName = ShaderUtil.GetPropertyName(s, j);
string descript = ShaderUtil.GetPropertyDescription(s, j) + ":";
object preVal;
object val;
switch(ShaderUtil.GetPropertyType(s, j)){
case ShaderUtil.ShaderPropertyType.Range:
EditorGUILayout.BeginHorizontal();
float min = ShaderUtil.GetRangeLimits(s, j, 1);
float max = ShaderUtil.GetRangeLimits(s, j, 2);
preVal = m.GetFloat(propName);
val = EditorGUILayout.Slider(descript, (float)preVal, min, max);
if(val != preVal){
Undo.RegisterUndo(m, m.name);
m.SetFloat(propName, (float)val);
}
EditorGUILayout.EndHorizontal();
break;
case ShaderUtil.ShaderPropertyType.Float:
preVal = m.GetFloat(propName);
val = EditorGUILayout.FloatField(descript, (float)preVal);
if(val != preVal){
Undo.RegisterUndo(m, m.name);
m.SetFloat(propName, (float)val);
}
break;
case ShaderUtil.ShaderPropertyType.Color:
preVal = m.GetColor(propName);
val = EditorGUILayout.ColorField(descript, (Color)preVal);
if(val != preVal){
Undo.RegisterUndo(m, m.name);
m.SetColor(propName, (Color)val);
}
break;
case ShaderUtil.ShaderPropertyType.TexEnv:
preVal = m.GetTexture(propName);
val = EditorGUILayout.ObjectField(descript, (Texture)preVal, typeof(Texture), false);
if(val != preVal){
Undo.RegisterUndo(m, m.name);
m.SetTexture(propName, (Texture)val);
}
break;
case ShaderUtil.ShaderPropertyType.Vector:
preVal = m.GetVector(propName);
val = EditorGUILayout.Vector4Field(descript, (Vector4)preVal);
if(val != preVal){
Undo.RegisterUndo(m, m.name);
m.SetVector(propName, (Vector4)val);
}
break;
}
}
EditorGUI.indentLevel--;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment