• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

Task의 IsEqual

24.04.17 11:24 작성 조회수 45

0

Quest System 구현 강의 마지막에 Quest System Test를 실습하던중 제대로 작동하지 않아 문의 드립니다.

 

디버그를 찍어봤는데 Task Script의 IsTarget() 함수에서 targets.Any(x=>x.IsEqual(target))부분에서 false가 된것이 원인이었습니다.

 

자세히 보니 QuestSystemTest에서 Target을 TaskTarget형태로 넘겨주고,
TaskTarget의 IsEqual에서 TaskTarget형식으로 받아서 문제가 된것이었습니다.

 

이를 방지하기 위해 아래와 같이 TaskTarget인지를 먼저 검사해야된다고 생각하는데,

혹시 제가 놓친부분이 있다면 알려주세요

public override bool IsEqual(object target)
{
    if(target.Equals(this))return true;

    string targetAsString = target as string;
    if (targetAsString == null)
        return false;
    return value == targetAsString;
}

 

답변 1

답변을 작성해보세요.

1

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

QuestSystemTest Script의 Update 함수를 보시면 다음과 같은데요,

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
        QuestSystem.Instance.ReceiveReport(category, target, 1);
}

 

실행되는 QuestSystem Script 114번 줄, TaskTarget을 인자로 받는 ReceiveReort 함수를 보시면 다음과 같습니다.

// 114번 줄
public void ReceiveReport(Category category, TaskTarget target, int successCount)
    => ReceiveReport(category.CodeName, target.Value, successCount);


위 함수에서 TaskTarget의 Value를 인자로 108번 줄의 ReceiveReport 함수를 호출하게 되므로,

// 108번 줄
public void ReceiveReport(string category, object target, int successCount)
{
    ReceiveReport(activeQuests, category, target, successCount);
    ReceiveReport(activeAchievements, category, target, successCount);
}

 

Task에게 TaskTarget 자체가 보고 되는 일은 없습니다.
제가 말씀드린 Code들을 확인해보시면 될 것 같습니다.

감사합니다.