public override void OnGUI(Rect position, SerializedProperty prop, GUIContent content)
{
var att = (ShaderPropertyPopupAttribute)attribute;
var directable = prop.serializedObject.targetObject as IDirectable;
if (directable != null)
{
var actor = directable.actor;
if (actor != null)
{
var renderer = actor.GetComponent <Renderer>();
if (renderer != null)
{
var material = renderer.sharedMaterial;
if (material != null)
{
var shader = material.shader;
var options = new List <string>();
for (var i = 0; i < ShaderUtil.GetPropertyCount(shader); i++)
{
if (ShaderUtil.IsShaderPropertyHidden(shader, i))
{
continue;
}
if (att.propertyType != null)
{
var type = ShaderUtil.GetPropertyType(shader, i);
if (att.propertyType == typeof(Color) && type != ShaderUtil.ShaderPropertyType.Color)
{
continue;
}
if (att.propertyType == typeof(Texture) && type != ShaderUtil.ShaderPropertyType.TexEnv)
{
continue;
}
if (att.propertyType == typeof(float) && type != ShaderUtil.ShaderPropertyType.Float && type != ShaderUtil.ShaderPropertyType.Range)
{
continue;
}
if ((att.propertyType == typeof(Vector2) || att.propertyType == typeof(Vector4)) && type != ShaderUtil.ShaderPropertyType.Vector)
{
continue;
}
}
options.Add(ShaderUtil.GetPropertyName(shader, i));
}
prop.stringValue = EditorTools.CleanPopup <string>(content.text, prop.stringValue, options);
return;
}
}
}
}
prop.stringValue = EditorGUILayout.TextField(content.text, prop.stringValue);
}