문제/상황

QuestManager에서 InvalidOperationExeption 에러 발생.

foreach 반복문으로 _inProgressQuestes 리스트를 순회하던 도중에, 리스트의 내용을 수정했기 때문.

해결법

for 반복문으로, 리스트를 역순으로 순회

    // 몬스터 사망 이벤트가 발생했을 때 호출될 함수
    private void OnEnemyDied(EnemyDiedEvent e)
    {
        // 진행중인 퀘스트 확인
        for (int i = _inProgressQuests.Count - 1; i >= 0; i--)
        {
            QuestState state = _inProgressQuests[i];
            QuestData data = _questDatabase[state.questKey];

            // '처치' 타입의 목표일 경우
            if (data.type == Define.QuestType.EnemyKill)
            {
                state.currentCount++; // 진행도 증가
                CheckQuestCompletion(state); // 퀘스트 완료 여부 확인
            }
            
        }
    }

결론

컬렉션을 순회하면서 동시에 수정해야 할 경우에는, foreach 대신 역순 for문을 사용하는 것이 표준적인 해결 방법이다.

문제/상황

아이템의 고유 정보(이름, 아이콘)와 성장 정보(레벨, 경험치)를 어떻게 관리할지 구조가 불명확했다.

해결법