게임 구상 단계
과제의 필수 요구사항
- 게임시작화면 구성
- 상태보기창 구성
- 인벤토리창 구성 (아이템 장착 시 [E]표시)
3-1 장착관리
- 상점 (보유골드, 아이템정보, 가격 표시, 이미 구매완료한 아이템 구매완료 표시)
4-1 아이템 구매 (이미구매...입니다/ 구매를 완료/ 골드가 부족 /잘못된 입력 표시)
과제의 선택 요구사항
- 아이템 정보를 클래스/구조체로 활용해보기
- 아이템 정보를 배열로 관리하기
- 아이템 추가하기 - 나만의 새로운 아이템을 추가해보기
- 판매하기 기능 추가(구매가격 85%, 장착아이템은 해제)
- 장착 개선 (타입별로 하나의 아이템만 장착, 기존 방어구가 있다면 해제하고 장착)
- 던전 입장 기능 추가
- 휴식기능 추가
- 레벨업 기능 추가
- 게임 저장하기 추가
게임 구상
- 유니티에서 화면에 나타나는 장면마다 씬을 구성했었기 때문에 Class Scene를 만들고
내부에 MainScene(), InventoryScence(), ShopScene() 등등을 만들어야겠다.
- 플레이어, 아이템, 상점 Class를 생성하여 각 데이터를 해당 Class에 저장한다.
- Scene>Shop>Plaer 로 구성하여 화면에 표시되는 Scene클래스에서는 Shop, Play에 정의된 함수에 접근이 가능하게 한다.

※ 해설영상에서는 Scene Class를 만들지 않고 메인함수에서 처리하였다.
- 과제에 제시된 내용과 같이 화면을 구성하고 While문과 if문으로 제시된 입력 외 다른 입력이 들어오는 경우 잘못된 입력입니다.를 출력되게 한다.
- Player 클래스의 변수들을 이용해 상태표시 <문제점. Player 클래스의 변수를 어떻게 가져오나?>
- Shop클래스에서 List를 이용하여 items를 만든다. displayItem 매서드를 만든다.
- 상점에서 물품을 구매하는 경우 items를 Player클래스의 playerItems에 해당 물품을 추가하고 isBuy를 true로 설정해준다.
- displayPlayerItem 매서드를 만들고 if문을 사용하여 isEquip이 true인 경우 [E]가 표시되게 한다. 장착 시 isWeapon 이 true인 경우 공격력를 더하고 false인경우 방어력을 더해준다.
- 나만의 아이템 추가는 Item클래스 생성자를 통해 쉽게 추가 가능.
- 판매하기 및 장착개선은 처음에는 쉽게 playerItems에서 선택된 장비를 판매하고 remove하면 될것이라고 생각했는데 isBuy를 false로 바꾸주는 부분에서 Index가 달라서 해결 방법을 찾아야 했다.
- 던전 입장 기능과 휴식기능은 과제에 표신된 내용 참조하여 쉽게 구현 가능.
- Player클래스의 Exp변수를 던전 클리어시 Exp++하여 Lv와 Exp가 같아지는 경우 Lv++하고 Exp는 0으로 만들어주는 매서드 추가.
- 게임 저장은 배운내용이 없어 검색을 통해 Json을 이용하기로 함.
문제점 및 해결방법
- 인터넷 강의 한번보고 만들다 보니 아직 기본지식이 부족하여 데이터가 이동하는 전체적인 흐름이 떠오르지 않음. 개인 프로젝트 제출을 목표로 일단은 만들어보자!!라는 생각으로 진행하였음.
- Class 내부에 생성된 매서드를 다른 Class에서도 Class이름.매서드 를 통해 사용이 가능할 줄 알았는데 사용이 안됨..(개인 프로젝트 제출 후 찾아보니 static으로 선언해야 사용가능)
- 결국 다른 Scene Class에 Player를 생성하고 Shop Class에서도 Player를 생성함 이렇게 작성하고 보니 두 객체가 다른 객체라서 데이터가 연동이 되지 않았음.
- 강의에 나와있는 다른 코드를 참고하여 메인 함수에서 Player를 생성하고 Scene과 Shop의 생성자에서 Player를 전달받는 형식으로 코드를 작성함


- Item을 판매하고 isBuy를 false로 만들기 위해 Items List에서 foreach문을 사용하여 item.Name이 playerItems.[selectNum-1].Name과 같은 경우 item.isBuy를 false로 바꾸는 방법을 사용하였으나 playerItems에서 remove를 하면 Null값이 되기 때문에 foreach문 내부에 remove를 작성 할 수 없었고 foreach문이 끝난 후에 다시 작성하면 else문에 밀려서 가독성이 떨어짐.
- for문을 playerItems.Count보다 작을때 까지 돌리고 items.Find(x=>x.Name==playerItems[selectNum-1].Name).isBuy=false 로 작성하여 해결
