/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void GeometryTypeCH(List <MaterialProperty> allProps, STCGeometryType[] geomTypes) { //-------------- STCGeometryType setGeomType = (STCGeometryType)EditorGUILayout.EnumPopup("Geometry Type", geomTypes[0]); if (EditorGUI.EndChangeCheck()) { bool shouldEnableAlphaTest = ShouldEnableAlphaTest(setGeomType); UnityEngine.Rendering.CullMode cullMode = shouldEnableAlphaTest ? UnityEngine.Rendering.CullMode.Off : UnityEngine.Rendering.CullMode.Back; foreach (Material m in targets.Cast <Material>()) { if (shouldEnableAlphaTest) { m.SetOverrideTag("RenderType", "treeTransparentCutout"); } for (int i = 0; i < STCGTypeString.Length; ++i) { m.DisableKeyword(STCGTypeString[i]); } m.EnableKeyword(STCGTypeString[(int)setGeomType]); m.renderQueue = shouldEnableAlphaTest ? (int)UnityEngine.Rendering.RenderQueue.AlphaTest : (int)UnityEngine.Rendering.RenderQueue.Geometry; m.SetInt("_Cull", (int)cullMode); } } EditorGUI.showMixedValue = false; MaterialProperty culling = allProps.Find(prop => prop.name == "_Cull"); if (culling != null) { allProps.Remove(culling); ShaderProperty(culling, culling.displayName); } //-------------- }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public override void OnInspectorGUI() { //-------------- SetDefaultGUIWidths(); serializedObject.Update(); SerializedProperty shaderFind = serializedObject.FindProperty("m_Shader"); if (!isVisible || shaderFind.hasMultipleDifferentValues || shaderFind.objectReferenceValue == null) { return; } //-------------- List <MaterialProperty> allProps = new List <MaterialProperty>(GetMaterialProperties(targets)); billboard = allProps.Find(prop => prop.name == "_Shadow_Cutoff") == null; //-------------- STCGeometryType[] geomTypes = new STCGeometryType[targets.Length]; for (int i = 0; i < targets.Length; ++i) { geomTypes[i] = STCGeometryType.Branch; for (int j = 0; j < STCGTypeString.Length; ++j) { if (((Material)targets[i]).shaderKeywords.Contains(STCGTypeString[j])) { geomTypes[i] = (STCGeometryType)j; break; } } } //-------------- EditorGUI.showMixedValue = geomTypes.Distinct().Count() > 1; EditorGUI.BeginChangeCheck(); Header(); //-------------- if (billboard == false) // Not Billboard { EditorGUILayout.LabelField("Geometry Type & Culling:", EditorStyles.boldLabel); DrawUILine(smLineColor, 1, smLinePadding); GeometryTypeCH(allProps, geomTypes); DrawUILine(bgLineColor, 2, bgLinePadding); } //-------------- EditorGUILayout.LabelField("Texture and Color Settings:", EditorStyles.boldLabel); DrawUILine(smLineColor, 1, smLinePadding); MainTexture(allProps, geomTypes); SpecularMap(allProps); OcclusionMap(allProps); EmissionMap(allProps); BumpMap(allProps); DrawUILine(bgLineColor, 2, bgLinePadding); //-------------- EditorGUILayout.LabelField("Color and Light Tuning:", EditorStyles.boldLabel); DrawUILine(smLineColor, 1, smLinePadding); ColorLightTuning(allProps); DrawUILine(bgLineColor, 2, bgLinePadding); //-------------- EditorGUILayout.LabelField("Wind Settings:", EditorStyles.boldLabel); DrawUILine(smLineColor, 1, smLinePadding); WindSettings(allProps); //-------------- foreach (MaterialProperty prop in allProps) { if ((prop.flags & MaterialProperty.PropFlags.HideInInspector) != 0) { continue; } ShaderProperty(prop, prop.displayName); } //-------------- Information(); RenderQueueField(); EnableInstancingField(); DoubleSidedGIField(); EditorGUILayout.Space(); EditorGUILayout.Space(); //-------------- }
bool ShouldEnableAlphaTest(STCGeometryType geomType) { return(geomType == STCGeometryType.Frond || geomType == STCGeometryType.Leaf); }