114 lines
2.8 KiB
C#
114 lines
2.8 KiB
C#
// Copyright (C) 2019-2021 Alexander Bogarsukov. All rights reserved.
|
|
// See the LICENSE.md file in the project root for more information.
|
|
|
|
using System;
|
|
using UnityEditor;
|
|
using UnityEditorInternal;
|
|
using UnityEditor.SceneManagement;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
|
|
namespace UnityFx.Outline
|
|
{
|
|
[CustomEditor(typeof(OutlineBehaviour))]
|
|
public class OutlineBehaviourEditor : Editor
|
|
{
|
|
private OutlineBehaviour _effect;
|
|
private SerializedProperty _settingsProp;
|
|
private bool _debugOpened;
|
|
private bool _renderersOpened;
|
|
private bool _camerasOpened;
|
|
|
|
private void OnEnable()
|
|
{
|
|
_effect = (OutlineBehaviour)target;
|
|
_settingsProp = serializedObject.FindProperty("_outlineSettings");
|
|
}
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
base.OnInspectorGUI();
|
|
|
|
// 1) Outline settings.
|
|
EditorGUI.BeginChangeCheck();
|
|
|
|
var mask = EditorGUILayout.MaskField("Ignore layers", _effect.IgnoreLayerMask, InternalEditorUtility.layers);
|
|
|
|
if (_effect.IgnoreLayerMask != mask)
|
|
{
|
|
Undo.RecordObject(_effect, "Set Ignore Layers");
|
|
_effect.IgnoreLayerMask = mask;
|
|
}
|
|
|
|
var e = (CameraEvent)EditorGUILayout.EnumPopup("Render Event", _effect.RenderEvent);
|
|
|
|
if (e != _effect.RenderEvent)
|
|
{
|
|
Undo.RecordObject(_effect, "Set Render Event");
|
|
_effect.RenderEvent = e;
|
|
}
|
|
|
|
var c = (Camera)EditorGUILayout.ObjectField("Target Camera", _effect.Camera, typeof(Camera), true);
|
|
|
|
if (c != _effect.Camera)
|
|
{
|
|
Undo.RecordObject(_effect, "Set Target Camera");
|
|
_effect.Camera = c;
|
|
}
|
|
|
|
EditorGUILayout.PropertyField(_settingsProp);
|
|
serializedObject.ApplyModifiedProperties();
|
|
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
EditorUtility.SetDirty(_effect.gameObject);
|
|
|
|
if (!EditorApplication.isPlayingOrWillChangePlaymode)
|
|
{
|
|
EditorSceneManager.MarkSceneDirty(_effect.gameObject.scene);
|
|
}
|
|
}
|
|
|
|
// 2) Renderers (read-only).
|
|
_renderersOpened = EditorGUILayout.Foldout(_renderersOpened, "Renderers", true);
|
|
|
|
if (_renderersOpened)
|
|
{
|
|
EditorGUI.BeginDisabledGroup(true);
|
|
EditorGUI.indentLevel += 1;
|
|
|
|
var rendererNumber = 1;
|
|
|
|
foreach (var renderer in _effect.OutlineRenderers)
|
|
{
|
|
EditorGUILayout.ObjectField("#" + rendererNumber.ToString(), renderer, typeof(Renderer), true);
|
|
rendererNumber++;
|
|
}
|
|
|
|
EditorGUI.indentLevel -= 1;
|
|
EditorGUI.EndDisabledGroup();
|
|
}
|
|
|
|
// 3) Cameras (read-only).
|
|
_camerasOpened = EditorGUILayout.Foldout(_camerasOpened, "Cameras", true);
|
|
|
|
if (_camerasOpened)
|
|
{
|
|
EditorGUI.BeginDisabledGroup(true);
|
|
EditorGUI.indentLevel += 1;
|
|
|
|
var cameraNumber = 1;
|
|
|
|
foreach (var camera in _effect.Cameras)
|
|
{
|
|
EditorGUILayout.ObjectField("#" + cameraNumber.ToString(), camera, typeof(Camera), true);
|
|
cameraNumber++;
|
|
}
|
|
|
|
EditorGUI.indentLevel -= 1;
|
|
EditorGUI.EndDisabledGroup();
|
|
}
|
|
}
|
|
}
|
|
}
|