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문을 사용하는 것이 표준적인 해결 방법이다.
아이템의 고유 정보(이름, 아이콘)와 성장 정보(레벨, 경험치)를 어떻게 관리할지 구조가 불명확했다.