inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

Skill (4) - Skill

커스텀 에디터에 관하여 질문이 있습니다.

143

고우진

작성한 질문수 26

0

Quest의 커스텀 에디터를 작성하였는데

Quest가 가진 TaskGroups의 TaskGroup의 변수를 수정하였는데 수정이 안되는데 커스텀 에디터의 하위 요소에도 부가적인 작업을 해야 수정이 되는건가요?

image.png


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();

}

이런식으로 작성을 하였는데

image.png

다른 enum으로 수정을 하여도 기본값인 Null이 출력됩니다.

unity modules

답변 2

0

Developer G

수강해주셔서 감사합니다.

따로 작업해주실건 없구요, 게임 플레이시에 enum 값이 안바뀐다는 얘기시면 Quest의 Clone 함수에서 new TaskGroup을 만들 때 enum 값도 복사하시는지 확인해보셔야할 것 같습니다.

public Quest Clone()

{

var clone = Instantiate(this);

clone.taskGroups = taskGroups.Select(x => new TaskGroup(x)).ToArray();

return clone;

}

감사합니다.

0

고우진

답변해주셔서 감사합니다 클로닝을 하는것을 깜빡하고 있었네요

0

고우진

public TaskGroup(TaskGroup copyTarget)

{

tasks = copyTarget.Tasks.Select(x => Object.Instantiate(x)).ToArray();

completion = copyTarget.completion;

}
Quest에서 Taskgroup을 복사할때 Taskgruop에서의 함수를 수정해야했네요
도와주셔서감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

커스텀 에디터에서 특정 데이터가 제대로 수정되지 않는 문제가 발생할 때, 이는 대개 SerializedProperty의 사용 방법과 관련이 있습니다. SerializedProperty는 Unity 에디터에서 객체의 필드를 시리얼라이즈하고 반영하는데 사용됩니다. 문제 해결에 도움이 될 수 있는 몇 가지 팁을 드리겠습니다.

  1. SerializedObject와 SerializedProperty 관계 확인: OnEnable()에서 SerializedPropertyserializedObject.FindProperty로 초기화할 때 대상 객체의 경로가 올바른지 확인해야 합니다. 예를 들어, taskGroups라는 변수가 실제로 Quest 클래스 내에 존재하는지, 그리고 그 이름이 정확히 일치하는지 확인하세요.

  2. PropertyField 적용 방법: PropertyField는 배열이나 리스트의 경우 별도로 하위 항목을 개별적으로 그려주어야 할 수 있습니다. EditorGUILayout.PropertyField(property, true)와 같이 두 번째 파라미터를 true로 설정하면 하위 항목도 자동으로 드로잉할 수 있습니다.

  3. SerializedObject 업데이트 및 적용: serializedObject.Update()는 현재의 변경 내용을 SerializedObject에 반영하기 전에 호출하고, serializedObject.ApplyModifiedProperties()는 모든 변경을 저장한 후 호출해야 합니다. 이 순서가 맞아야 반영됩니다.

  4. Enum 문제 해결:

    • Enum 변경 사항이 저장되지 않는 문제는 SerializedProperty가 제대로 값을 저장하지 못하는 경우 발생할 수 있습니다. 이럴 때는 EditorGUILayout.EnumPopup을 활용하여 직접 Enum 값을 선택할 수 있도록 구현해보세요.
    • 예를 들어:
      
      EditorGUILayout.PropertyField(enumProperty, new GUIContent("Enum Property"));
      

조금 더 상세한 확인이 필요하다면, 이 링크에서 유사한 문제를 다룬 게시물이 있으니 참고해 보세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Indicator와 SelectionAction 및 SearchAction 간의 관계에 대해 질문있습니다.

0

70

2

ChargingState에서 질문이 있습니다.

0

49

1

Effect.GetData 함수 질문있습니다.

0

45

2

CanTransitionToSelf 질문 있습니다.

0

53

2

Stat의 MaxValue에 관하여 질문이 있습니다.

0

42

1

Stat vs StatScaleFloat

0

75

4

애니매이션 버그가 있는것 같습니다.

0

65

2

StatsOverride질문이 있습니다.

0

50

2

SetBonusValue함수 질문있습니다.

0

46

2

오늘 수강시작한 취준생입니다.

0

49

1

사소하지만 에디터 관련 질문있습니다

0

69

1

스킬시스템을 데이터 테이블화 하는 법에 대해 감이안잡혀서 질문드립니다.

0

146

2

TargetSearcher에 대해서 질문이 있습니다

0

52

1

돌진해서 몸박을하면 피격자를 날리면서 데미지를 입히는 스킬은 이 시스템에서 어떻게 만들 수 있을까요??

0

116

2

스킬 관련 질문입니다

0

110

2

통일된 Stat을 사용하지 않고 모듈화 방식으로 Stats를 만드신 이유가 궁금합니다.

0

152

1

Effect에 기능 확장에 대해서 질문이 있습니다.

0

149

2

SkillData 구조체 질문

0

122

1

스킬트리 저장 질문입니다

0

135

2

BT와 FSM을 활용해 몬스터 AI 구현

0

350

2

MonoStateMachine을 만든 이유가 잘 이해가 가지 않습니다.

0

128

1

근접 콤보 공격을 만들고 싶습니다.

0

153

1

하나의 스킬 내에서 타겟, 이펙트가 여러번 바뀌게 하는 방법이 궁금합니다.

0

190

1

올해에 예정된 새로운 강의가 있으신지요?

0

115

2