-
스파르타 최종 프로젝트 26일차게임 개발기록 2024. 7. 22. 15:27
1. 아이템 제작 기능 만들기
먼저 유닛 슬롯들이 아이콘과 애니메이터 컨트롤러를 로드 해올 때 문제가 있었다.
제대로 리소스를 로드 해오지 않았는데 원인은 그거였다.
나는 데이터를 CSV로 받아오는데 이 때 마지막 줄에 /n이 붙어서 경로를 제대로 찾지 못 한 문제였다.
그래서 Replace라는 함수를 이용해서 해결했다.
code = datas[7].Replace("\r", ""); /r을 공백으로 바꿔줌.
이렇게 하니까 정상적으로 리소스를 받아와서 초기화가 잘 되었다.
이제 어제 만들어 둔 UI를 작업 해주자.
목록에서 제작 할 아이템을 클릭 하면 상단에 메뉴가 초기화 되고 각종 함수들이 호출 되게 해주면 될 것이다.
먼저 재료오브젝트는 계속 해서 바뀌고, 수가 다르다. 그래서 오브젝트풀로 이용해서 재료들이 표시 되게 할 것이다.
아이템을 클릭을 하면 그 아이템의 요구 재료 수만큼 재료표시 오브젝트를 오브젝트풀로 꺼내와서 모양과 자막을 바꾸게 하면 된다.
먼저 처음에 나는 이거 순환방식 자체가 특정한 데이터를 찾는 게 아니라 순서는 상관이 없어서 Queue로 만들었었다.
그런데 Queue로 하니 문제가 하나 있었다.
이 요구 재료의 표시순서가 낮은 등급 순서로 나오고 골드는 마지막에 나왔어야 했는데, 큐로 하니까 순서가 뒤죽박죽이였는데, 나는 얘네가 변경 되는 것을 자막과 아이콘 이미지만 바뀌게 한 것이지 순서까지 바꾸게 한 것은 아니여서 생기는 문제였다.
그래서 List로 바꾸고 가장 먼저 바뀌는 것은 첫 번째부터 바뀌게 해서 제대로 적용 되게 해줬다.
그리고 이 때 데이터를 어떻게 넘길까 고민이 많이 됐다. SO는 쓰기가 싫었고, 요구 재료에 아이템도 뜨게 하고 싶었다.
SO를 사용 해서 만들 었을 경우에 저장기능 구현 할 시에 만들었던 아이템의 SO를 다시 리소스를 통해서 가져와야 하는데 굳이 써야 할 이유가 있을까 의문이 들었다. 클래스로 만들면 클래스만 저장 하면 되기 때문이다.
그런데 그렇게 하려면 조금 복잡 했다.
그래서 우선은 아이템도 요구재료에 뜨게 하는 건 못 했고 재료만 필요하게 만들었다.
나중에 아이템도 요구재료에 들어가게 할 생각이다.
계속 하다가 SO를 만들면 쉬울 것 같은데 일단 안 썻다.
지금 시간이 지나고 나서 블로그 정리를 하고 있는데 기억이 잘 안난다. 아무튼 아이템 제작 하는 class에서 필요한 재료 class를 받게 만들고 아이템들이 그 함수를 건드릴 때 자기 자신을 넘기게 했다.
그리고 아이템 리스트 같은 경우는 동적생산이 아니라 직접 만들어 놓게 했는데 이렇게 수가 정해져있는 것은 직접 만드는 것이 낫다고 들은 것 같아서 미리 만들어 두게 했다.
그런데 역시 알아서 생기게 하는 게 편한 것 같긴 하다.
분명 내가 저번에 아이템도 조건에 넣으려면 이것만 하면 된다라고 생각이 들은 게 있는데 지금 생각이 안난다. 큰일남.
그래서 일단 아이템 제작 구조는 이렇게 되어 있다.
아이템을 제작 하게 하는 Class, 아이템 LIst Class 얘네가 아이템들의 데이터를 갖고 있다.
이런 식으로 인스펙터에서 데이터를 집어넣게 만들었다.
그리고 이 데이터를 받아와서 아이템을 제작 하는 class가 요구재료 오브젝트를 소환 하게 만들었다.
이건 프리펩으로 만들어서 Canvas를 오브젝트풀 생성 하게 하는 statci으로 만들어서 사용 했다. UI 오브젝트다.
이렇게 해서 아이템을 제작 누르면 제작이 되는 것까지는 만들었다.
이제 실질적으로 플레이어에게 아이템이 만들어지고 적용 되는 것들을 해주면 된다.
지금 일단 곡괭이 색상이 저렇게 4개밖에 없어서 4개인데 나중에 색깔 작업 해서 추가 해야 겠다.
2. 제작한 곡괭이 적용 되게 하기
곡괭이를 제작 하면 공격력이 상승 하고 유닛들이 들고 있는 이미지가 바뀌게 해야 한다.
그리고 곡괭이는 한 번만 제작 할 수 있게 만들 것이기에 이부분도 해줘야 한다.
한 번만 제작 같은 경우에는 곡괭이 클래스에 bool 변수 하나를 추가 해줬다. 그래서 제작 하면 true가 되어서 제작을 못 하게 했다.
그리고 곡괭이를 만들면 유저 Inventory에 들어가게 해서 거기에 능력치가 상승 되게 했다.
공격력을 계산 할 때 Inventory에 추가 공격력을 참고 해서 능력치가 적용 되게 해놓았다.
Inventory에 아이템을 추가 하는 함수를 만들고 제작 할 때 그 함수를 호출 하게 했다. 함수를 호출 하면서 매개변수로 선택 된 아이템의 데이터를 넘기게끔, 그렇게 하면 능력치가 적용 되는 것은 끝이다.
그다음에 이제 유닛들이 들고 다니는 이미지를 바꾸게 하는 것을 해야 한다.
맨손으로 땅 파고 다니던 유닛들이 드디어 장비를 착용 하는 순간..!
에셋 스크린샷에 속아서 힘들었다. 처음에는 곡괭이 장착 한채로 있는 줄 알았는데 그런 거 없고 공격 애니메이션도 전부 다 내가 만들어야 했다 . 그래서 곡괭이 추가 할 때 위치들도 다 잡아줘야 하고 애니메이션도 다 따로 만들어줘야 해서 오래 걸리고 엄청 힘들었다. 뼈대 같은 게 다 달라서 위치들 싹 다 잡아줘야 했다. 어색 해보이지 않게 하려고 정말 한땀한땀 한픽섹한픽셀 단위로 움직이게 한 것 같다.
이게 가만히 있을 때 움직이는 애니메이션이 있는데 하나하나 다 해줘야 하는데 ㄹㅇ 쉽지 않았다.
아무튼 유닛들에게 곡괭이를 추가 시켜줬고, 곡괭이를 제작 했을 때
나는 처음에 참조형을 이용해서 이미지를 바뀌게 한다는 마인드로 곡괭이들을 프리펩으로 만들어서 유닛들에게 추가를 해줬다.
그런데 인게임에서 프리펩에 이미지를 바뀌게 해서 유닛들의 이미지가 바뀌게 하게 시도를 해보았는데 참조형 이해도에 대한 이슈였다. 내가 원하는 대로 되지는 않았다.
이미 유닛들이 생성 될 때 프리펩을 복사해왔고 그건 다른 객체가 되어서 이기 때문이다.
스텟들을 계산 할 때 클래스를 넘겨서 같은 걸 참조 하는 이유는 같은 주소를 참조 하기 때문인거고, 이거는 조금 느낌이 다르다.
아무튼 그래서 다른 방법을 생각을 했어야 했다.
방법은 두 가지였다.
첫 번째는 유닛들이 스폰이 될 때 곡괭이 이미지를 변경 시키는 로직을 추가 하는 것이었다.
스폰 될 때마다 곡괭이 이미지를 바뀌게 해서 스폰을 시키는 것이었다.
그런데 이렇게 하면 매번 스폰 될 때마다 곡괭이 이미지가 바뀌어서 비효율적인 것 같다고 생각이 들었다.
(7월 26일, 그런데 지금 또 생각 해보니 이 방법에 if조건문을 사용해서 하면 지금 방식보다 더 효율적인 것 같다. 나중에 다시 수정해야겠다.)
그래서 곡괭이를 제작 하게 하면 오브젝트 풀 유닛들에게 접근을 해서 걔네들이 갖고 있는 곡괭이 이미지를 싹 다 바꾸게 하는 방법으로 기능을 적용 하게 했다.
이렇게 만들고 나중에 유닛들이 추가 생성 될 때 또 걔네들에게 접근 해서 이미지를 바꾸게 하는 것을 추가 하면 될 것 같다.
그래서 곡괭이를 제작 할 때 오브젝트 풀의 유닛 수만큼 반복문을 돌고 걔네들한테 접근을 해서 이미지를 바꾸게 하는 함수를 호출 하게 만들었다.
이렇게 까지 해서 곡괭이 제작까지 완료를 했다. 그리고 저장기능까지 추가해서 마무리 했다.
나중에 아이템 강화제작도 추가를 해주면 되겠다.
그리고 난 TIL 개발일지로 낸적이 없는데 갑자기 우수 TIL 받았다.
괜히 오해 하는 분들 없겠지. 나는 텅 빈 TIL 페이지만 TIL로 제출 했는데.., 그래도 우연히 봤다가 좋게 봐주셔서 주신 것 같다.
이제 캠프 끝나는 것도 얼마 남지 않았다..
좀 더 힘내고 스피드를 올려야겠다.
'게임 개발기록' 카테고리의 다른 글
스파르타 최종 프로젝트 28일차 (6) 2024.07.24 스파르타 최종프로젝트 27일차 (0) 2024.07.24 스파르타 최종프로젝트 25일차 (0) 2024.07.22 스파르타 최종프로젝트 24일차 (1) 2024.07.21 스파르타 최종프로젝트 23일차 (0) 2024.07.19