Inflearn Community Q&A
Quest Detail View
Written on
·
208
0
Quest Detail View는 Tracker랑 다르게 몬스터를 잡으면 퀘스트 진행도가 바로바로 업데이트가 안되고 퀘스트를 클릭 했을 때 업데이트가 되는데 이걸 어떻게 고쳐야 Tracker랑 똑같이 바로바로 업데이트가 될까요?
unity
Answer 1
0
Developer G
Instructor
수강해주셔서 감사합니다.
방법은 여러가지가 될 수 있습니다만, 실시간 업데이트로 가장 간편한 방법은 역시 이벤트 등록일겁니다.
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 |
가이드 정도만 할 목적으로 작성된 코드이기 때문에 최적화할 부분이 많으니 그 부분을 생각해보시면서 코드를 작성해보시면 좋을 것 같습니다.





