Fix : 에디터 UI 동적 리빌드 시 PropertyField 바인딩 누락 수정 및 삭제 확인 팝업 제거

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
user 2026-02-24 00:05:06 +09:00
parent 802bea169d
commit e9739076b0
4 changed files with 32 additions and 51 deletions

View File

@ -91,6 +91,8 @@ public class AvatarOutfitControllerEditor : Editor
{ {
avatarsContainer.Add(CreateAvatarElement(i)); avatarsContainer.Add(CreateAvatarElement(i));
} }
avatarsContainer.Bind(serializedObject);
} }
private VisualElement CreateAvatarElement(int avatarIndex) private VisualElement CreateAvatarElement(int avatarIndex)
@ -263,10 +265,6 @@ public class AvatarOutfitControllerEditor : Editor
} }
private void DeleteAvatar(int index) private void DeleteAvatar(int index)
{
var avatar = controller.avatars[index];
if (EditorUtility.DisplayDialog("아바타 삭제",
$"아바타 '{avatar.avatarName}'을(를) 삭제하시겠습니까?", "삭제", "취소"))
{ {
Undo.RecordObject(target, "Delete Avatar"); Undo.RecordObject(target, "Delete Avatar");
controller.avatars.RemoveAt(index); controller.avatars.RemoveAt(index);
@ -274,7 +272,6 @@ public class AvatarOutfitControllerEditor : Editor
serializedObject.Update(); serializedObject.Update();
RebuildAvatarList(); RebuildAvatarList();
} }
}
private void SwapAvatars(int a, int b) private void SwapAvatars(int a, int b)
{ {
@ -300,10 +297,6 @@ public class AvatarOutfitControllerEditor : Editor
} }
private void DeleteOutfit(int avatarIndex, int outfitIndex) private void DeleteOutfit(int avatarIndex, int outfitIndex)
{
var outfit = controller.avatars[avatarIndex].outfits[outfitIndex];
if (EditorUtility.DisplayDialog("의상 삭제",
$"의상 '{outfit.outfitName}'을(를) 삭제하시겠습니까?", "삭제", "취소"))
{ {
Undo.RecordObject(target, "Delete Outfit"); Undo.RecordObject(target, "Delete Outfit");
var outfits = new List<AvatarOutfitController.OutfitData>(controller.avatars[avatarIndex].outfits); var outfits = new List<AvatarOutfitController.OutfitData>(controller.avatars[avatarIndex].outfits);
@ -313,7 +306,6 @@ public class AvatarOutfitControllerEditor : Editor
serializedObject.Update(); serializedObject.Update();
RebuildAvatarList(); RebuildAvatarList();
} }
}
#endregion #endregion

View File

@ -318,17 +318,12 @@ public class CameraManagerEditor : Editor
} }
private void DeletePreset(int index) private void DeletePreset(int index)
{
var preset = manager.cameraPresets[index];
if (EditorUtility.DisplayDialog("프리셋 삭제",
$"프리셋 '{preset.presetName}'을(를) 삭제하시겠습니까?", "삭제", "취소"))
{ {
Undo.RecordObject(target, "Delete Camera Preset"); Undo.RecordObject(target, "Delete Camera Preset");
manager.cameraPresets.RemoveAt(index); manager.cameraPresets.RemoveAt(index);
EditorUtility.SetDirty(target); EditorUtility.SetDirty(target);
RebuildPresetList(); RebuildPresetList();
} }
}
private void SwapPresets(int a, int b) private void SwapPresets(int a, int b)
{ {

View File

@ -85,6 +85,8 @@ public class EventControllerEditor : Editor
{ {
eventsContainer.Add(CreateEventGroupElement(i)); eventsContainer.Add(CreateEventGroupElement(i));
} }
eventsContainer.Bind(serializedObject);
} }
private VisualElement CreateEventGroupElement(int index) private VisualElement CreateEventGroupElement(int index)
@ -155,10 +157,6 @@ public class EventControllerEditor : Editor
} }
private void DeleteEvent(int index) private void DeleteEvent(int index)
{
var group = controller.eventGroups[index];
if (EditorUtility.DisplayDialog("이벤트 삭제",
$"이벤트 '{group.groupName}'을(를) 삭제하시겠습니까?", "삭제", "취소"))
{ {
Undo.RecordObject(target, "Delete Event Group"); Undo.RecordObject(target, "Delete Event Group");
controller.eventGroups.RemoveAt(index); controller.eventGroups.RemoveAt(index);
@ -166,7 +164,6 @@ public class EventControllerEditor : Editor
serializedObject.Update(); serializedObject.Update();
RebuildEventList(); RebuildEventList();
} }
}
private void SwapEvents(int a, int b) private void SwapEvents(int a, int b)
{ {

View File

@ -87,6 +87,8 @@ public class ItemControllerEditor : Editor
{ {
itemsContainer.Add(CreateItemGroupElement(i)); itemsContainer.Add(CreateItemGroupElement(i));
} }
itemsContainer.Bind(serializedObject);
} }
private VisualElement CreateItemGroupElement(int index) private VisualElement CreateItemGroupElement(int index)
@ -166,10 +168,6 @@ public class ItemControllerEditor : Editor
} }
private void DeleteItem(int index) private void DeleteItem(int index)
{
var group = controller.itemGroups[index];
if (EditorUtility.DisplayDialog("그룹 삭제",
$"그룹 '{group.groupName}'을(를) 삭제하시겠습니까?", "삭제", "취소"))
{ {
Undo.RecordObject(target, "Delete Item Group"); Undo.RecordObject(target, "Delete Item Group");
controller.itemGroups.RemoveAt(index); controller.itemGroups.RemoveAt(index);
@ -177,7 +175,6 @@ public class ItemControllerEditor : Editor
serializedObject.Update(); serializedObject.Update();
RebuildItemList(); RebuildItemList();
} }
}
private void SwapItems(int a, int b) private void SwapItems(int a, int b)
{ {