본문 바로가기
유니티

Day 12 - 텍스트 게임 만들기(오류 해결 과정3)

by shin0707 2024. 4. 27.
728x90

  • 주제

>>C#을 이용해 텍스트 게임 만들기 및 오류 해결3


  • 오류 발생 및 해결

<오류>

인벤토리 - 장착 관리에서 아이템에 해당하는 번호를 선택하면, 장착 또는 장착 해제가 가능하게 만들고 싶었다. 

인벤토리 - 장착 관리

 

상점에서 처음으로 아이템 하나를 구매하여 아이템의 해당 번호(1번)를 눌렀더니, 오류가 발생했다.

살펴보니 상점에서 '5. 모자'를 처음으로 구매하면,

boughtDic 딕셔너리에는 Key값 5로 아이템정보가 저장된다.

처음 구매한 아이템은 인벤토리 - 장착관리 [아이템 목록]에 1번으로 추가된다.

<상점>

choose = 5;
boughtDic.Add(5, "모자");


<인벤토리 - 장착 관리>

choose = 1;
AddOnOffData(1);

public void AddOnOffData(1)
{
    if (boughtDic.TryGetValue(1, out string one)) -->오류발생(boughtDic 딕셔너리에는 Key값 1 없음)
    {
        if (!onDic.ContainsKey(a))
        {
            onDic.Add(a, one); //장착(onDic에 추가)
        }
        else
        {
            onDic.Remove(a); //미장착(onDic에서 제거)
        }
    }
}

<해결>

boughtValueList 리스트를 사용하여 문제를 해결하였다.

boughtValueList 리스트는 상점에서 몇 번째에 해당하는 아이템을 구매하던,

구매한 순서대로 아이템정보를 추가한다.

첫 구매시, boughtValueList[0] = "모자"

두번째 구매시, boughtValueList[1] = "모자"

 

ex) 상점에서 처음으로 5. 모자를 구매. 인벤토리-장착 관리에서 1. 모자 선택(장착 시도)

 

<상점>

choose = 5;

boughtDic.Add(5, "모자");

boughtValueList.Add( "모자" );

boughtValueList[0] = "모자";

 

<인벤토리 - 장착 관리>

choose = 1;

AddOnOffData(1);

onDic.Add(1, boughtValueList[0]); 

//구매정보 리스트
List<string> boughtValueList = new List<string>();

//장착목록(장착번호,장착정보) 딕셔너리
Dictionary<int, string> onDic = new Dictionary<int, string>();

//장착 및 해제된 아이템정보 추가
public void AddOnOffData(int a)
{
    if (!onDic.ContainsKey(a))
    {
        onDic.Add(a, boughtValueList[a - 1]); //onDic에 추가(장착)
    }
    else
    {
        onDic.Remove(a); //onDic에서 제거(미장착)
    }
}
728x90
반응형