user 4a49ecd772 Refactor: 배경/프랍 브라우저 IMGUI→UI Toolkit 전환 + USS 리디자인
- BackgroundSceneLoaderWindow: OnGUI → CreateGUI (Toolbar + ToolbarSearchField)
- PropBrowserWindow: OnGUI → CreateGUI (Toolbar + ToolbarSearchField)
- StreamingleCommon.uss: 브라우저 공통 스타일 추가 (그리드/리스트/뷰토글/액션바/상태바)
- excludeFromWeb 상태 새로고침 시 보존 수정
- 삭제된 배경 리소스 정리

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 01:55:48 +09:00

85 lines
2.1 KiB
C#

using UnityEngine;
using UnityEditor;
public abstract class BaseRetargetingEditor : Editor
{
protected bool isDirty = false;
protected double lastUpdateTime;
protected const double UPDATE_INTERVAL = 0.1f;
protected virtual void OnEnable()
{
EditorApplication.update += OnEditorUpdate;
Undo.undoRedoPerformed += OnUndoRedo;
lastUpdateTime = EditorApplication.timeSinceStartup;
}
protected virtual void OnDisable()
{
EditorApplication.update -= OnEditorUpdate;
Undo.undoRedoPerformed -= OnUndoRedo;
}
protected virtual void OnEditorUpdate()
{
if (EditorApplication.timeSinceStartup - lastUpdateTime < UPDATE_INTERVAL)
return;
if (isDirty)
{
RefreshAllComponents();
isDirty = false;
}
lastUpdateTime = EditorApplication.timeSinceStartup;
}
protected virtual void RefreshAllComponents()
{
if (serializedObject == null || target == null || !serializedObject.targetObject) return;
if (serializedObject.hasModifiedProperties)
{
serializedObject.Update();
}
var targetObj = target as MonoBehaviour;
if (targetObj != null && targetObj.isActiveAndEnabled)
{
EditorUtility.SetDirty(targetObj);
if (!EditorApplication.isPlaying)
{
UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(
targetObj.gameObject.scene);
}
}
if (Selection.activeObject == target)
{
Repaint();
}
}
protected virtual void OnUndoRedo()
{
isDirty = true;
Repaint();
}
protected void MarkDirty()
{
if (!isDirty)
{
isDirty = true;
if (target != null && serializedObject != null)
{
EditorUtility.SetDirty(target);
if (serializedObject.hasModifiedProperties)
{
serializedObject.ApplyModifiedProperties();
}
}
}
}
}