-
오늘은 우수 답변을 적지는 않고 지금까지 한 것을 정리해보는 시간을 가져보려고 합니다.
1. 도감
정해져 있는 아이템을 얻게 되면 그 번호에 맞는 아이템이 해금되어 확인이 가능합니다.
이미지는 팀원 은실님께서 찾아서 넣어주셨고 흰색 네모는 도감을 닫는 버튼으로 알맞은 이미지를 찾지 못해서 둔 상태입니다.
게임을 플레이할 때 도감을 누르면 갯수에 맞게 슬롯이 생기게 됩니다. 슬롯은 생성 시 Array에 들어가도록 했으며, 버튼을 누르게 되면 얻은 아이템의 정보를 볼 수 있습니다. (얻지 못한 아이템의 슬롯은 누를 수 없음)
얻지 못한 아이템의 경우 자물쇠 이미지가 나오고 얻은 아이템의 경우에는 아이템에 맞는 이미지가 나오도록 설정할 예정입니다.
(자물쇠 이미지는 있지만 아이템 이미지가 없는 상태)
public void OnDogamItem(int key) { if (ItemDataManager.Instance.dogamItemData.ContainsKey(key)) { //이미지 변경되는 부분이 필요함. itemSlots[key].transform.Find("GetItem").gameObject.SetActive(true); itemSlots[key].GetComponent<Button>().enabled = true; } else { itemSlots[key].transform.Find("GetItem").gameObject.SetActive(false); itemSlots[key].GetComponent<Button>().enabled = false; } }
도감에 들어가는 아이템들은 Dictionary의 key값을 통해서 관리되며 key는 itemID입니다.
ContainsKey를 통해서 key가 있는지 확인하고 있다면 key와 같은 index를 SetActive(true) 해줍니다.
생성할 때 전부 Button.enabled = false 상태에서 key를 가지고 있을 때만 Button.enabled = true로 바꾸면 되는 것 아닌가 라는 생각이 드는데 다 완성하고 나서 지금 든 생각이므로 추후에 바꾸면 좋을 것 같습니다.
=> 수정
private void MakeDogamItemSlot() { for (int i = 0; i < itemSlots.Length; i++) { itemSlots[i].GetComponent<Button>().enabled = false; if (ItemDataManager.Instance.dogamItemData.ContainsKey(i)) { OnDogamItem(i); } } } private void OnDogamItem(int key) { //이미지 변경되는 부분이 필요함. itemSlots[key].transform.Find("GetItem").gameObject.SetActive(true); itemSlots[key].GetComponent<Button>().enabled = true; }
인게임 내에서 볼 수 없는 부분이므로 start를 이용해주었습니다.
2. 인벤토리
도감이랑 비슷하지만 얻은 아이템 순서대로 들어가야하며, 슬롯의 갯수가 정해져 있지 않습니다.
도감이랑 이미지가 같지만 왼쪽에 아이템을 보는 부분이랑 엔딩씬을 볼 수 있는 부분을 삭제했습니다. 어차피 아이템만 볼 수 있기 때문입니다.
private void AddItemList() { for(int i = 0; i < ItemManager.Instance.getItemsNumber.Count;i++) { SetItemSlot(ItemManager.Instance.getItems[ItemManager.Instance.getItemsNumber[i]].id); items.Add(ItemManager.Instance.getItems[ItemManager.Instance.getItemsNumber[i]].id, ItemManager.Instance.getItems[ItemManager.Instance.getItemsNumber[i]]); } ItemManager.Instance.getItemsNumber.Clear(); } public void SetItemSlot(int id) { if (items.Count >= 3 && items.Count % 3 == 0) { MakeInventorySlot(3); } inventorySlot[items.Count].transform.Find("GetItem").gameObject.SetActive(true); inventorySlot[items.Count].GetComponent<Button>().onClick.AddListener(() => InventorySlotButton(id)); }
처음에는 슬롯이 3개만 존재합니다. 얻은 아이템의 갯수가 3의 배수를 넘어가게 되면 3개씩 새로 생성하게 됩니다.
여기서 아이템이 6개를 넘어서 7개를 얻은 다음에 인벤토리를 열면 슬롯이 몇개가 생길지 의문이듭니다... 나중에 테스트해봐야겠네요.
얻은 아이템은 Dictionary에 ItemID를 키값으로 가지며, Item 정보를 value로 가지도록 만들었습니다.
슬롯은 계속 생성되어야하므로 List를 통해 관리하도록 했습니다.
얻는 아이템을 itemID 순으로 얻는다는 보장이 없으므로 슬롯에 버튼의 파라미터를 index값으로 넣어주지 않고 itemID 값을 넣어서 슬롯을 누르면 저장되어있는 itemID를 Dictionary의 key 값으로 이용해서 아이템 정보를 가져오도록 만들어주었습니다.
핸드폰 전화번호부와 캘린더 부분을 추가적으로 만들었으며,
현재 인적사항 조사랑 CCTV, 휴대폰 조사 부분을 추가적으로 만들려고합니다.
핸드폰 전화번호부와 캘린더 부분의 경우
다른 분께서 사용하고 있는 함수 정리를 하는 과정에 있으셔서 병합을 했더니 제대로 수행이 안되는 오류가 있습니다.
내일 이 부분을 수정해서 또 올려보도록하겠습니다.