powerfun-unity/Assets/Scripts/UI/UIEffect/Editor/BaseMeshEffectEditor.cs
2021-12-28 11:25:09 +08:00

86 lines
1.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace Assets.Scripts.UI.UIEffect.Editors
{
public class BaseMeshEffectEditor : Editor
{
List<MaterialEditor> _materialEditors = new List<MaterialEditor> ();
protected virtual void OnEnable ()
{
ClearMaterialEditors ();
}
protected virtual void OnDisable ()
{
ClearMaterialEditors ();
}
void ClearMaterialEditors ()
{
foreach (var e in _materialEditors)
{
if (e)
{
DestroyImmediate (e);
}
}
_materialEditors.Clear ();
}
protected void ShowMaterialEditors (Material [] materials, int startIndex, int count)
{
for (int i = 0; i < count; i++)
{
if (_materialEditors.Count == i)
{
_materialEditors.Add (null);
}
var mat = materials [startIndex + i];
var editor = _materialEditors [i];
if (editor && editor.target != mat)
{
DestroyImmediate (editor);
editor = null;
}
if (!editor)
{
editor = _materialEditors [i] = Editor.CreateEditor (mat) as MaterialEditor;
}
editor.DrawHeader ();
editor.OnInspectorGUI ();
}
}
protected void ShowCanvasChannelsWarning ()
{
BaseMeshEffect effect = target as BaseMeshEffect;
if (!effect || !effect.graphic)
{
return;
}
#if UNITY_5_6_OR_NEWER
AdditionalCanvasShaderChannels channels = effect.requiredChannels;
var canvas = effect.graphic.canvas;
if (canvas && (canvas.additionalShaderChannels & channels) != channels)
{
EditorGUILayout.BeginHorizontal ();
EditorGUILayout.HelpBox (string.Format ("Enable {1} of Canvas.additionalShaderChannels to use {0}.", effect.GetType ().Name, channels), MessageType.Warning);
if (GUILayout.Button ("Fix"))
{
canvas.additionalShaderChannels |= channels;
}
EditorGUILayout.EndHorizontal ();
}
#endif
}
}
}