Files
Outline-Toolkit/Editor/Scripts/OutlineBehaviourEditor.cs

114 lines
2.8 KiB
C#
Raw Normal View History

2025-07-20 21:01:09 +08:00
// 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();
}
}
}
}