// // DrawTargetObjectEditor.cs // // Dynamic Shadow Projector // // Copyright 2015 NYAHOON GAMES PTE. LTD. All Rights Reserved. // using UnityEngine; using UnityEditor; namespace DynamicShadowProjector.Editor { [CustomEditor(typeof(DrawTargetObject))] public class DrawTargetObjectEditor : EditorBase { void OnEnable() { DrawTargetObject component = target as DrawTargetObject; if (component.shadowShader == null && (component.replacementShaders == null || component.replacementShaders.Length == 0)) { component.shadowShader = FindMaterial("DynamicShadowProjector/Shadow/Opaque"); component.replacementShaders = new DrawTargetObject.ReplaceShader[2]; component.replacementShaders[0].renderType = "Transparent"; component.replacementShaders[0].shader = Shader.Find("DynamicShadowProjector/Shadow/Transparent"); component.replacementShaders[1].renderType = "TransparentCutout"; component.replacementShaders[1].shader = component.replacementShaders[0].shader; serializedObject.Update(); EditorUtility.SetDirty(component); } } static bool s_showAdvancedOptions = false; public override void OnInspectorGUI () { EditorGUILayout.BeginHorizontal(); GUILayout.Label("Online Document"); if (GUILayout.Button("http://nyahoon.com/products/dynamic-shadow-projector/draw-target-object-component", richTextStyle)) { Application.OpenURL("http://nyahoon.com/products/dynamic-shadow-projector/draw-target-object-component"); } EditorGUILayout.EndHorizontal(); bool isGUIEnabled = GUI.enabled; EditorGUILayout.PropertyField(serializedObject.FindProperty("m_target")); SerializedProperty prop = serializedObject.FindProperty("m_renderChildren"); EditorGUILayout.PropertyField(prop); ++EditorGUI.indentLevel; GUI.enabled = isGUIEnabled && prop.boolValue; EditorGUILayout.PropertyField(serializedObject.FindProperty("m_layerMask")); GUI.enabled = isGUIEnabled; --EditorGUI.indentLevel; prop = serializedObject.FindProperty("m_textureAlignment"); EditorGUILayout.PropertyField(prop); bool bUpdate = prop.intValue != (int)DrawTargetObject.TextureAlignment.None; prop = serializedObject.FindProperty("m_followTarget"); EditorGUILayout.PropertyField(prop); bUpdate = bUpdate || prop.boolValue; ++EditorGUI.indentLevel; GUI.enabled = isGUIEnabled && bUpdate; EditorGUILayout.PropertyField(serializedObject.FindProperty("m_updateFunction")); GUI.enabled = isGUIEnabled; --EditorGUI.indentLevel; EditorGUILayout.PropertyField(serializedObject.FindProperty("m_targetDirection")); s_showAdvancedOptions = GUILayout.Toggle(s_showAdvancedOptions, "Show Advanced Options"); if (s_showAdvancedOptions) { ++EditorGUI.indentLevel; EditorGUILayout.PropertyField(serializedObject.FindProperty("m_shadowShader")); EditorGUILayout.PropertyField(serializedObject.FindProperty("m_replacementShaders"), true); --EditorGUI.indentLevel; } serializedObject.ApplyModifiedProperties(); } } }