public override void OnInspectorGUI() { rayDesigner = (RayDesigner)target; serializedObject.Update(); EditorGUILayout.BeginVertical("Box"); { EditorGUILayout.LabelField("Ray Designer", EditorStyles.toolbarButton); EditorGUILayout.BeginHorizontal(); { if (GUILayout.Button("Add Ray", EditorStyles.toolbarButton)) { rayDesigner.AddRay(); return; } GUI.color = new Color(.909f, 0.066f, 0.137f, 1f); if (GUILayout.Button("Remove", EditorStyles.toolbarButton)) { rayDesigner.RemoveRay(); return; } GUI.color = Color.white; } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical("Box"); { EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Simulate"); Simulate.boolValue = EditorGUILayout.Toggle(Simulate.boolValue); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Active on Start"); ActiveOnStart.boolValue = EditorGUILayout.Toggle(ActiveOnStart.boolValue); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Dynamic Update"); IsDynamic.boolValue = EditorGUILayout.Toggle(IsDynamic.boolValue); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginVertical("Box"); { EditorGUILayout.LabelField("Marker Points"); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Start Point"); StartPoint.objectReferenceValue = EditorGUILayout.ObjectField(StartPoint.objectReferenceValue, typeof(GameObject), true) as GameObject; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("End Point"); EndPoint.objectReferenceValue = EditorGUILayout.ObjectField(EndPoint.objectReferenceValue, typeof(GameObject), true) as GameObject; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Control Point 1"); ControlPointOne.objectReferenceValue = EditorGUILayout.ObjectField(ControlPointOne.objectReferenceValue, typeof(GameObject), true) as GameObject; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Control Point 2"); ControlPointTwo.objectReferenceValue = EditorGUILayout.ObjectField(ControlPointTwo.objectReferenceValue, typeof(GameObject), true) as GameObject; } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Activation Speed"); ActivationSpeed.floatValue = EditorGUILayout.FloatField(ActivationSpeed.floatValue); } EditorGUILayout.EndHorizontal(); GUILayout.Space(5f); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Start Effect"); StartEffect.objectReferenceValue = EditorGUILayout.ObjectField(StartEffect.objectReferenceValue, typeof(ParticleSystem), true) as ParticleSystem; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Hit Effect"); HitEffect.objectReferenceValue = EditorGUILayout.ObjectField(HitEffect.objectReferenceValue, typeof(ParticleSystem), true) as ParticleSystem; } EditorGUILayout.EndHorizontal(); GUILayout.Space(5f); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Start Light"); StartLight.objectReferenceValue = EditorGUILayout.ObjectField(StartLight.objectReferenceValue, typeof(Light), true) as Light; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("End Light"); EndLight.objectReferenceValue = EditorGUILayout.ObjectField(EndLight.objectReferenceValue, typeof(Light), true) as Light; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Start Light Intensity"); StartLightIntensityOverTime.animationCurveValue = EditorGUILayout.CurveField(StartLightIntensityOverTime.animationCurveValue, Color.white, new Rect(0f, 0f, 10f, 8f)); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("End Light Intensity"); EndLightIntensityOverTime.animationCurveValue = EditorGUILayout.CurveField(EndLightIntensityOverTime.animationCurveValue, Color.white, new Rect(0f, 0f, 10f, 8f)); } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndHorizontal(); if (rayDesigner.Rays.Count == 0) { return; } EditorGUILayout.BeginVertical("Box"); { EditorGUILayout.LabelField("Rays (Click to unfold)", EditorStyles.toolbarButton); GUILayout.Space(5f); for (int i = 0; i < rayDesigner.Rays.Count; i++) { if (i % 2f == 0) { GUI.color = new Color(.85f, .85f, .85f, 1f); } else { GUI.color = new Color(.95f, .95f, .95f, 1f); } EditorGUILayout.BeginHorizontal(); { if (GUILayout.Button("Ray " + i.ToString(), EditorStyles.miniButtonLeft)) { rayDesigner.Rays[i].unfolded = !rayDesigner.Rays[i].unfolded; } GUI.color = new Color(1f, .8f, 0f, 1f); if (GUILayout.Button("Duplicate", EditorStyles.miniButtonMid, GUILayout.MaxWidth(Screen.width / 6f))) { rayDesigner.DuplicateRay(i); return; } GUI.color = Color.white; if (rayDesigner.Rays[i].RayHolder.activeSelf) { GUI.color = new Color(0f, .8f, 0f, 1f); if (GUILayout.Button("Hide", EditorStyles.miniButtonMid, GUILayout.MaxWidth(Screen.width / 8f))) { rayDesigner.Rays[i].RayHolder.SetActive(false); } GUI.color = Color.white; } else { GUI.color = new Color(0.3f, .6f, 0.3f, 1f); if (GUILayout.Button("Show", EditorStyles.miniButtonMid, GUILayout.MaxWidth(Screen.width / 8f))) { rayDesigner.Rays[i].RayHolder.SetActive(true); } GUI.color = Color.white; } GUI.color = new Color(.909f, 0.066f, 0.137f, 1f); if (GUILayout.Button("X", EditorStyles.miniButtonRight, GUILayout.MaxWidth(Screen.width / 22f))) { if (rayDesigner.Rays[i].RayHolder != null) { DestroyImmediate(rayDesigner.Rays[i].RayHolder); } rayDesigner.Rays.RemoveAt(i); return; } GUI.color = Color.white; } EditorGUILayout.EndHorizontal(); GUI.color = Color.white; if (rayDesigner.Rays[i].unfolded) { EditorGUILayout.BeginVertical("Box"); { EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Face Mode (Need Main Camera)"); SerializedProperty FaceMode = Rays.GetArrayElementAtIndex(i).FindPropertyRelative("faceMode"); FaceMode.enumValueIndex = (int)(RayDesigner.FaceMode)EditorGUILayout.EnumPopup((RayDesigner.FaceMode)FaceMode.enumValueIndex); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Material"); SerializedProperty Mat = Rays.GetArrayElementAtIndex(i).FindPropertyRelative("Mat"); if (AssetDatabase.FindAssets(Mat.objectReferenceValue.name).Length == 0) { GUI.color = Color.green; if (GUILayout.Button("Save", EditorStyles.toolbarButton)) { string Path = EditorUtility.SaveFilePanelInProject("Pick file location", "New_Mat", "mat", "Please enter a file name to save the texture to"); if (Path != "") { AssetDatabase.CreateAsset(Mat.objectReferenceValue, Path); AssetDatabase.SaveAssets(); } } GUI.color = Color.yellow; Mat.objectReferenceValue = EditorGUILayout.ObjectField(Mat.objectReferenceValue, typeof(Material), true) as Material; GUI.color = Color.white; } else { Mat.objectReferenceValue = EditorGUILayout.ObjectField(Mat.objectReferenceValue, typeof(Material), true) as Material; } /* * EditorGUILayout.LabelField("Material"); * SerializedProperty Mat = Rays.GetArrayElementAtIndex(i).FindPropertyRelative("Mat"); * Mat.objectReferenceValue = EditorGUILayout.ObjectField(Mat.objectReferenceValue, typeof(Material), true) as Material; */ } EditorGUILayout.EndHorizontal(); SerializedProperty Steps = Rays.GetArrayElementAtIndex(i).FindPropertyRelative("Steps"); Steps.intValue = EditorGUILayout.IntField("Smoothness", Steps.intValue); Steps.intValue = Mathf.Max(Steps.intValue, 3); SerializedProperty Shape = Rays.GetArrayElementAtIndex(i).FindPropertyRelative("Shape"); Shape.animationCurveValue = EditorGUILayout.CurveField("Shape", Shape.animationCurveValue, Color.white, new Rect(0f, 0f, 1f, 1f)); SerializedProperty AmplitudeMask = Rays.GetArrayElementAtIndex(i).FindPropertyRelative("AmplitudeMask"); AmplitudeMask.animationCurveValue = EditorGUILayout.CurveField("Amplitude Mask", AmplitudeMask.animationCurveValue, Color.white, new Rect(0f, 0f, 1f, 1f)); SerializedProperty WidthAmplitude = Rays.GetArrayElementAtIndex(i).FindPropertyRelative("WidthAmplitude"); WidthAmplitude.floatValue = EditorGUILayout.FloatField("Size", WidthAmplitude.floatValue); SerializedProperty TextureSpeed = Rays.GetArrayElementAtIndex(i).FindPropertyRelative("TextureSpeed"); TextureSpeed.floatValue = EditorGUILayout.FloatField("Texture Speed", TextureSpeed.floatValue); SerializedProperty DistortionSpeed = Rays.GetArrayElementAtIndex(i).FindPropertyRelative("DistortionSpeed"); DistortionSpeed.floatValue = EditorGUILayout.FloatField("Distortion Speed", DistortionSpeed.floatValue); } EditorGUILayout.EndVertical(); } } } EditorGUILayout.EndVertical(); serializedObject.ApplyModifiedProperties(); }