작성
·
22
0
Quest의 커스텀 에디터를 작성하였는데
Quest가 가진 TaskGroups의 TaskGroup의 변수를 수정하였는데 수정이 안되는데 커스텀 에디터의 하위 요소에도 부가적인 작업을 해야 수정이 되는건가요?
protected SerializedProperty taskGroupsProperty;
protected SerializedProperty rewardsProperty;
protected SerializedProperty useAutoCompleteProperty;
protected SerializedProperty isCancelableProperty;
protected SerializedProperty isSaveavleProperty;
protected SerializedProperty acceptConditonsProperty;
protected SerializedProperty cancelConditionProperty;
protected override void OnEnable()
{
base.OnEnable();
taskGroupsProperty = serializedObject.FindProperty("taskGroups");
rewardsProperty = serializedObject.FindProperty("rewards");
useAutoCompleteProperty = serializedObject.FindProperty("useAutoComplete");
isCancelableProperty = serializedObject.FindProperty("isCancelable");
isSaveavleProperty = serializedObject.FindProperty("isSaveable");
acceptConditonsProperty = serializedObject.FindProperty("acceptionConditions");
cancelConditionProperty = serializedObject.FindProperty("cancelConditions");
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
serializedObject.Update();
if (DrawFoldoutTitle("Task"))
EditorGUILayout.PropertyField(taskGroupsProperty);
if (DrawFoldoutTitle("Rewards"))
EditorGUILayout.PropertyField(rewardsProperty);
if (DrawFoldoutTitle("Option"))
EditorGUILayout.PropertyField(useAutoCompleteProperty);
EditorGUILayout.PropertyField(isCancelableProperty);
EditorGUILayout.PropertyField (isSaveavleProperty);
if (DrawFoldoutTitle("Condition"))
EditorGUILayout.PropertyField(acceptConditonsProperty);
EditorGUILayout.PropertyField(cancelConditionProperty);
serializedObject.ApplyModifiedProperties();
}
이런식으로 작성을 하였는데
다른 enum으로 수정을 하여도 기본값인 Null이 출력됩니다.
답변 2
0
수강해주셔서 감사합니다.
따로 작업해주실건 없구요, 게임 플레이시에 enum 값이 안바뀐다는 얘기시면 Quest의 Clone 함수에서 new TaskGroup을 만들 때 enum 값도 복사하시는지 확인해보셔야할 것 같습니다.
public Quest Clone()
{
var clone = Instantiate(this);
clone.taskGroups = taskGroups.Select(x => new TaskGroup(x)).ToArray();
return clone;
}
감사합니다.
public TaskGroup(TaskGroup copyTarget)
{
tasks = copyTarget.Tasks.Select(x => Object.Instantiate(x)).ToArray();
completion = copyTarget.completion;
}
Quest에서 Taskgroup을 복사할때 Taskgruop에서의 함수를 수정해야했네요
도와주셔서감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
커스텀 에디터에서 특정 데이터가 제대로 수정되지 않는 문제가 발생할 때, 이는 대개 SerializedProperty
의 사용 방법과 관련이 있습니다. SerializedProperty
는 Unity 에디터에서 객체의 필드를 시리얼라이즈하고 반영하는데 사용됩니다. 문제 해결에 도움이 될 수 있는 몇 가지 팁을 드리겠습니다.
SerializedObject와 SerializedProperty 관계 확인: OnEnable()
에서 SerializedProperty
를 serializedObject.FindProperty
로 초기화할 때 대상 객체의 경로가 올바른지 확인해야 합니다. 예를 들어, taskGroups
라는 변수가 실제로 Quest
클래스 내에 존재하는지, 그리고 그 이름이 정확히 일치하는지 확인하세요.
PropertyField 적용 방법: PropertyField
는 배열이나 리스트의 경우 별도로 하위 항목을 개별적으로 그려주어야 할 수 있습니다. EditorGUILayout.PropertyField(property, true)
와 같이 두 번째 파라미터를 true
로 설정하면 하위 항목도 자동으로 드로잉할 수 있습니다.
SerializedObject 업데이트 및 적용: serializedObject.Update()
는 현재의 변경 내용을 SerializedObject
에 반영하기 전에 호출하고, serializedObject.ApplyModifiedProperties()
는 모든 변경을 저장한 후 호출해야 합니다. 이 순서가 맞아야 반영됩니다.
Enum 문제 해결:
SerializedProperty
가 제대로 값을 저장하지 못하는 경우 발생할 수 있습니다. 이럴 때는 EditorGUILayout.EnumPopup을 활용하여 직접 Enum 값을 선택할 수 있도록 구현해보세요.
EditorGUILayout.PropertyField(enumProperty, new GUIContent("Enum Property"));
조금 더 상세한 확인이 필요하다면, 이 링크에서 유사한 문제를 다룬 게시물이 있으니 참고해 보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변해주셔서 감사합니다 클로닝을 하는것을 깜빡하고 있었네요