private bool NeedShow(MaterialEditor editor) { for (int i = 0; i < targets.Length; i++) { string target = targets[i]; float value = values[i]; var property = ExtendShaderGUI.Get(editor)?.FindProperty(target); if (property == null) { return(false); } bool result = false; switch (property.type) { case MaterialProperty.PropType.Color: result = property.colorValue == new Color(value, value, value, value); break; case MaterialProperty.PropType.Vector: result = property.vectorValue == new Vector4(value, value, value, value); break; case MaterialProperty.PropType.Float: case MaterialProperty.PropType.Range: result = property.floatValue == value; break; case MaterialProperty.PropType.Texture: result = property.textureValue != null; break; } if (!invent) { if (!result) { return(false); } } else { if (result) { return(false); } } } return(true); }
public override void OnGUI(Rect p, MaterialProperty prop, GUIContent label, MaterialEditor editor) { var p0 = params2 != null?ExtendShaderGUI.Get(editor)?.FindProperty(params2) : null; var p1 = ExtendShaderGUI.Get(editor)?.FindProperty(property1); var p2 = ExtendShaderGUI.Get(editor)?.FindProperty(property2); var p3 = ExtendShaderGUI.Get(editor)?.FindProperty(property3); EditorGUIUtility.labelWidth = 0; EditorGUI.indentLevel++; fold = EditorGUILayout.BeginFoldoutHeaderGroup(fold, label.text); if (fold) { EditorGUI.BeginChangeCheck(); Vector3 v1 = new Vector3(); Vector3 v2 = new Vector3(); v1.x = EditorGUILayout.Slider("色相", prop.vectorValue.x, -180f, 180f); v1.y = EditorGUILayout.Slider("饱和", prop.vectorValue.y, 0, 2); v1.z = EditorGUILayout.Slider("明度", prop.vectorValue.z, 0, 2); if (p0 != null) { v2.x = EditorGUILayout.Slider("青 - 红", p0.vectorValue.x, -1f, 1f); v2.y = EditorGUILayout.Slider("洋 - 绿", p0.vectorValue.y, -1f, 1f); v2.z = EditorGUILayout.Slider("黄 - 蓝", p0.vectorValue.z, -1f, 1f); } EditorGUILayout.EndFoldoutHeaderGroup(); if (EditorGUI.EndChangeCheck()) { prop.vectorValue = v1; float h = v1[0]; float s = v1[1]; float v = v1[2]; float vsu = v * s * Mathf.Cos(h * Mathf.PI / 180f); float vsw = v * s * Mathf.Sin(h * Mathf.PI / 180f); Matrix4x4 hsv = new Matrix4x4( new Vector4(.299f * v + .701f * vsu + .168f * vsw, .587f * v - .587f * vsu + .330f * vsw, .114f * v - .114f * vsu - .497f * vsw, 0), new Vector4(.299f * v - .299f * vsu - .328f * vsw, +.587f * v + .413f * vsu + .035f * vsw, +.114f * v - .114f * vsu + .292f * vsw, 0), new Vector4(.299f * v - .300f * vsu + 1.25f * vsw, +.587f * v - .588f * vsu - 1.05f * vsw, +.114f * v + .886f * vsu - .203f * vsw, 0), new Vector4(0, 0, 0, 1)); if (p0 != null) { p0.vectorValue = v2; float r = v2.x; float g = v2.y; float b = v2.z; Matrix4x4 balance = new Matrix4x4( new Vector4(1 - r, r * 0.5f, r * 0.5f, 0), new Vector4(g * 0.5f, 1 - g, g * 0.5f, 0), new Vector4(b * 0.5f, b * 0.5f, 1 - b, 0), new Vector4(0, 0, 0, 1)); hsv = balance * hsv; } p1.vectorValue = hsv.GetColumn(0); p2.vectorValue = hsv.GetColumn(1); p3.vectorValue = hsv.GetColumn(2); } } EditorGUI.indentLevel--; }