inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Quest Detail View

212

갱냄갱냄

작성한 질문수 3

0

Quest Detail View는 Tracker랑 다르게 몬스터를 잡으면 퀘스트 진행도가 바로바로 업데이트가 안되고 퀘스트를 클릭 했을 때 업데이트가 되는데 이걸 어떻게 고쳐야 Tracker랑 똑같이 바로바로 업데이트가 될까요?

unity

답변 1

0

Developer G

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

방법은 여러가지가 될 수 있습니다만, 실시간 업데이트로 가장 간편한 방법은 역시 이벤트 등록일겁니다.
QuestDetailView의 Show 함수에서 Target = quest;를 해줄 때 Quest의 onTaskSuccessChanged 이벤트 변수에 진행도를 업데이트하는 이벤트를 만들어서 등록해주면 됩니다.

예를 들면 아래와 같습니다.
QuestDetailView.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public void ShowTasks(Quest quest)
{
        int taskIndex = 0;
        foreach (var taskGroup in quest.TaskGroups)
        {
            foreach (var task in taskGroup.Tasks)
            {
                var poolObject = taskDescriptorPool[taskIndex++];
                poolObject.gameObject.SetActive(true);
 
                if (taskGroup.IsComplete)
                    poolObject.UpdateTextUsingStrikeThrough(task);
                else if (taskGroup == quest.CurrentTaskGroup)
                    poolObject.UpdateText(task);
                else
                    poolObject.UpdateText("● ??????????");
            }
        }
}
 
private void OnTaskSuccessChanged(Quest quest, Task task, int currentSuccess, int prevSuccess)
         => ShowTasks(quest);
 
public void Show(Quest quest)
{
        displayGroup.SetActive(true);
 
        if (Target != null)
          Target.onTaskSuccessChanged -= OnTaskSuccessChanged;
        Target = quest;
        Target.onTaskSuccessChanged += OnTaskSuccessChanged;
 
        title.text = quest.DisplayName;
        description.text = quest.Description;
 
        ShowTasks(Target);
...
...
...
}
 
public void Hide()
{
        if (Target != null)
          Target.onTaskSuccessChanged -= OnTaskSuccessChanged;
        Target = null;
        displayGroup.SetActive(false);
        cancelButton.gameObject.SetActive(false);
}
cs

 

가이드 정도만 할 목적으로 작성된 코드이기 때문에 최적화할 부분이 많으니 그 부분을 생각해보시면서 코드를 작성해보시면 좋을 것 같습니다.

Task 구현 28:36 Equals 에서 잘 모르는 부분이 있습니다.

0

45

2

Quest System의 확장성에 대한 질문

0

111

1

공부 방향에 대해 궁금한 점이 있습니다.

0

152

2

End()와 Complete() 함수를 따로 구현한 의도

0

179

2

Target의 value에 Object 자료형 관련 질문입니다!

0

158

2

TaskGroupState에 대하여 질문이 있습니다

0

118

2

Elite와 Normal Germ의 IsTarget()질문입니다.

0

109

2

퀘스트 시스템을 확장하면서 생긴 의문점 입니다.

0

181

2

퀘스트 클리어해도 동일 퀘스트가 노출됩니다

1

142

3

퀘스트 누적 클리어 횟수에 대해 여쭤보고싶습니다.

0

93

1

프로퍼티 사용 질문입니다.

0

125

1

Task 에서 Object 타입 사용

0

131

2

파일 저장방식, 퀘스트 실패에 관하여 여쭤보고싶습니다.

0

240

1

Destroy() 지연 파괴에 관하여

0

147

1

Action & Delegate

0

184

2

강의에서 리워드 관련 언급은 없으셔서 질문드립니다.

0

286

1

궁금한게있습니다

0

305

1

스크립터블 오브젝트 Instantiate?

0

448

1

원하는 타이밍에 퀘스트를 등록하고 싶다면 어떻게 해야할까요

0

346

1

Quest Cancel() 메소드

0

273

2

Task의 IsEqual

0

234

1

실전예제 UI 자료

0

205

1

스크립터블 오브젝트

1

337

1

Task 예시

1

179

1