add Manually serialize button for so

This commit is contained in:
DCFApixels 2025-03-20 11:05:29 +08:00
parent 7f11e90aa5
commit 98190ae382
4 changed files with 51 additions and 4 deletions

View File

@ -16,6 +16,20 @@ namespace DCFApixels.DragonECS.Unity.Editors
{ {
public static partial class Layout public static partial class Layout
{ {
public static void ManuallySerializeButton(UnityObject obj)
{
if (GUILayout.Button(UnityEditorUtility.GetLabel("Manually serialize")))
{
var so = new SerializedObject(obj);
EditorUtility.SetDirty(obj);
so.UpdateIfRequiredOrScript();
so.ApplyModifiedProperties();
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
}
public static void ScriptAssetButton(MonoScript script, params GUILayoutOption[] options) public static void ScriptAssetButton(MonoScript script, params GUILayoutOption[] options)
{ {
EcsGUI.ScriptAssetButton(GUILayoutUtility.GetRect(UnityEditorUtility.GetLabelTemp(), EditorStyles.miniButton, options), script); EcsGUI.ScriptAssetButton(GUILayoutUtility.GetRect(UnityEditorUtility.GetLabelTemp(), EditorStyles.miniButton, options), script);

View File

@ -758,6 +758,18 @@ namespace DCFApixels.DragonECS.Unity.Editors
#endregion #endregion
#region Other Elements #region Other Elements
public static void ManuallySerializeButton(Rect position, UnityEngine.Object obj)
{
if (GUI.Button(position, UnityEditorUtility.GetLabel("Manually serialize")))
{
var so = new SerializedObject(obj);
EditorUtility.SetDirty(obj);
so.UpdateIfRequiredOrScript();
so.ApplyModifiedProperties();
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
}
public static bool AddComponentButton(Rect position, out Rect dropDownRect) public static bool AddComponentButton(Rect position, out Rect dropDownRect)
{ {
dropDownRect = RectUtility.AddPadding(position, 20f, 20f, 1f, 1f); ; dropDownRect = RectUtility.AddPadding(position, 20f, 20f, 1f, 1f); ;

View File

@ -16,6 +16,8 @@ namespace DCFApixels.DragonECS.Unity.Editors
private SerializedProperty _componentsProp; private SerializedProperty _componentsProp;
private ReorderableList _reorderableComponentsList; private ReorderableList _reorderableComponentsList;
protected abstract bool IsSO { get; }
//public virtual bool IsStaticData { get { return false; } } //public virtual bool IsStaticData { get { return false; } }
#region Init #region Init
@ -161,6 +163,11 @@ namespace DCFApixels.DragonECS.Unity.Editors
return; return;
} }
if (IsSO)
{
EcsGUI.Layout.ManuallySerializeButton(target);
}
if (IsMultipleTargets == false && SerializationUtility.HasManagedReferencesWithMissingTypes(target)) if (IsMultipleTargets == false && SerializationUtility.HasManagedReferencesWithMissingTypes(target))
{ {
using (EcsGUI.Layout.BeginHorizontal(EditorStyles.helpBox)) using (EcsGUI.Layout.BeginHorizontal(EditorStyles.helpBox))
@ -206,11 +213,13 @@ namespace DCFApixels.DragonECS.Unity.Editors
internal class ScriptableEntityTemplateEditor : EntityTemplateEditorBase internal class ScriptableEntityTemplateEditor : EntityTemplateEditorBase
{ {
//public override bool IsStaticData { get { return true; } } //public override bool IsStaticData { get { return true; } }
protected override bool IsSO => true;
} }
[CustomEditor(typeof(MonoEntityTemplate), true)] [CustomEditor(typeof(MonoEntityTemplate), true)]
internal class MonoEntityTemplateEditor : EntityTemplateEditorBase internal class MonoEntityTemplateEditor : EntityTemplateEditorBase
{ {
//public override bool IsStaticData { get { return false; } } //public override bool IsStaticData { get { return false; } }
protected override bool IsSO => false;
} }
} }
#endif #endif

View File

@ -8,8 +8,7 @@ using UnityEngine;
namespace DCFApixels.DragonECS.Unity.Editors namespace DCFApixels.DragonECS.Unity.Editors
{ {
[CustomEditor(typeof(ScriptablePipelineTemplate))] internal abstract class PipelineTemplateEditorBase : ExtendedEditor<IPipelineTemplate>
internal class PipelineTemplateEditorBase : ExtendedEditor<IPipelineTemplate>
{ {
private SerializedProperty _parametersProp; private SerializedProperty _parametersProp;
private SerializedProperty _layersProp; private SerializedProperty _layersProp;
@ -23,6 +22,8 @@ namespace DCFApixels.DragonECS.Unity.Editors
get => _reorderableLayersList != null && _reorderableRecordsList != null; get => _reorderableLayersList != null && _reorderableRecordsList != null;
} }
protected abstract bool IsSO { get; }
protected override void OnStaticInit() { } protected override void OnStaticInit() { }
protected override void OnInit() protected override void OnInit()
{ {
@ -143,6 +144,11 @@ namespace DCFApixels.DragonECS.Unity.Editors
protected override void DrawCustom() protected override void DrawCustom()
{ {
if (IsSO)
{
EcsGUI.Layout.ManuallySerializeButton(target);
}
EcsGUI.Changed = GUILayout.Button("Validate"); EcsGUI.Changed = GUILayout.Button("Validate");
DrawLayoutNameList(_layersProp); DrawLayoutNameList(_layersProp);
@ -199,8 +205,14 @@ namespace DCFApixels.DragonECS.Unity.Editors
} }
[CustomEditor(typeof(ScriptablePipelineTemplate), true)] [CustomEditor(typeof(ScriptablePipelineTemplate), true)]
internal class ScriptablePipelineTemplateEditor : PipelineTemplateEditorBase { } internal class ScriptablePipelineTemplateEditor : PipelineTemplateEditorBase
{
protected override bool IsSO => true;
}
[CustomEditor(typeof(MonoPipelineTemplate), true)] [CustomEditor(typeof(MonoPipelineTemplate), true)]
internal class MonoPipelineTemplateEditor : PipelineTemplateEditorBase { } internal class MonoPipelineTemplateEditor : PipelineTemplateEditorBase
{
protected override bool IsSO => false;
}
} }
#endif #endif