어제에 이어서 프로젝트를 계속 진행했음.
상점, 아이템 구매, 구매 시 아이템 구매 표시
구매한 아이템이 인벤토리에 보이게 하고 아이템을 장착, 해제 하는 기능
스탯창에 장착한 아이템의 수치를 반영하는 기능을 제작하였음
이러한 기능들을 구현하다가 생긴 문제점들을 작성하고 어떻게 해결하였는지를 작성할 예정
문제
상점-아이템 구매 창에서 아이템을 구매하면 구매한 아이템만큼 소유한 돈이 감소하고, 구매한 아이템은 인벤토리 아이템리스트에 추가하는 함수를 작성하는 중이었다.
BuyItem()으로 함수를 선언했고, 필요한 변수들을 매개변수로 추가해 주었다.
처음엔 사진처럼 작성을 해주었다. 사진을 보면 foreach로 shopItem 객체를 받아와서 그 안의 아이템들을 하나씩 item에 저장해서 받아오는 형식을 사용했다.
BuyNumber로 입력값을 받으면, 인덱스로 사용해서 상점 화면에 원하는 아이템의 정보를 가져와서 인벤토리의 아이템 리스트에 추가할 수 있을거라는 생각으로 코드를 작성하였다.
다만 막상 실행을 하니 빌드 과정에서 에러가 생겼다. 로그를 보니까 []을 사용하는 인덱싱을 "Item"형식의 식에 적용할 수 없다는 것이었다.
문제
원인 :
해결 :
문제 :
원인
해결
기본 플레이어 스탯값을 건들면 안되니까 추가 스탯에만 영향을 끼칠 수 있도록 Player.cs에서 기본 스탯에 대한 공격력, 방어력 필드를 각각 생성해줌
기존의 공격력, 방어력 값은 총 공경력, 방어력으로 주석 달아줌
리플렉트 함수에서 추가 수치에 대한 변수를 각각 생성함
그리고 (+숫자) 를 표현 할 수 있게 하기 위해 plusStatA, plusStatB를 생성해주고 ""; 로 초기화 함
각 케이스에 value를 추가 수치에 더할 수 있도록 변경해주고, 앞서 빈문자열로 초기화 해준 변수들도 각각 케이스에 맞게 추가 수치를 문자열로 받도록 함.
최종 능력치는 기본 능력치 + 장착 아이템 추가 수치로 반영되도록 하였음
그리고 그리고 추가 수치를 ShowPlayerStatus에 반영하기 위해 out으로 매개변수를 선언해줌.
이러면 함수에서 얻은 변수 값을 함수 밖으로 가져갈 수 있음!
plusStatA, plusStatP는 out 파라미터로 선언해야 함수 내에서 값을 바꿔도 호출한 쪽에서 반영됨
일단 각 키워드 들이 정확히 어떤 역할을 하고 어떤 구조로 작동되는지를 좀 더 자세히 공부해야할 필요를 느꼈다.
그리고 여전히 로직의 중요성을 체감하고 있다. 로직이라고 해도 되는진 모르겠는데, 어떤 식으로 기능을 구성하고 코드를 만들면 되겠다. 싶은 정도로는 메모장으로 계속 작성하면서 설계를 하고 시작하는데, 이러면 막히던 것도 풀리게 되서 좋은 것 같다.
out 함수를 어떤 경우에 쓰는지를 깨닫게 되지 않았나 싶다.