개발 일지/소프트웨어
프로젝트 회고록 #1 : 21년 4-6월 Unity 외주
프로젝트 회고록 #1 : 21년 4-6월 Unity 외주
2021.07.23개요 4월부터 진행하던 외주 프로젝트가 끝이 났다. 정확히는 끝났다기보다는 계약 기간 이후 유지보수 기간이라, 소소하게 연락 오는 일들을 처리하고 있는 상태다. 마감일이 고정되어 있고, 그렇다고 해서 기간이 널널하지도 않았던지라 시간 관리나 리팩토링 부분에서 아쉬움을 느끼기도 했다. 아무튼 끝났으므로 미래의 나를 위해 이번 프로젝트에서 겪었던 문제상황과 그 해결 방법 등을 정리하고자 한다. 주요 문제상황 및 해결과정 - Android 10 지원 구버전과는 달리, Android 10에서는 제약사항이 늘어났다. 대표적으로 저장소 액세스 이슈가 있었다. 10 이상을 타겟팅하는 앱은 외부에 범위 지정 저장소(Scoped Storage)가 생긴다. 이로 인해 원하는 위치에 마음대로 접근할 수 없게 되었다. 이 때..
[Unity] 사이퍼즈 파티 메이커 앱 개발기 - 구현 단계(4)
[Unity] 사이퍼즈 파티 메이커 앱 개발기 - 구현 단계(4)
2021.01.09광고나 인앱 결제를 구현 후, 구글 플레이의 검토가 오래 걸려서 잠시 대기했다. 뭐 흔히 일어나는 일이지만 뻘짓을 좀 했는데, 아래에 서술하기로 하자. - 커플 유저를 양방향으로 만듬 뭐... 전 게시글에선 장황하게 써 놨지만, 등록 시 양쪽 모두의 Lovers 리스트에 등록하는 것으로 해결했다. 어차피 모든 유저의 Lovers를 확인해야 한다는 건 변함 없더라. - 정조합을 만들지 못하는 경우 조합을 만들 때, 남은 포지션 매칭 중 해당 유저의 포지션 자리가 없을 경우 예외 케이스로 처리된다. 예시로 2탱 3원딜 조합이 뽑혔는데, 탱커 자리가 모두 차고 남은 유저의 모스트 포지션이 원딜이 아닐 때이다. 이전에는 그 유저가 잘 하는 포지션을 넘겨줬는데, 그랬더니 3탱 조합이나 2근딜 조합이 등장해서, 이..
[Unity] 사이퍼즈 파티 메이커 앱 개발기 - 구현 단계(3)
[Unity] 사이퍼즈 파티 메이커 앱 개발기 - 구현 단계(3)
2020.12.22어쩌다보니 건드린지 꽤 된 파티 메이커. 사실은 조합을 어떻게 주어야할지에 대한 답이 안 나와서 미루고 있었음. 어쨌든 해결했으니 결과부터 보자. 조합 맞추기 시스템을 만들었다. 닉네임은 실제 사이퍼즈 닉네임이므로 불투명도를 0으로 해서 가려 놨음. 기존 앱에 추천 조합 보기 토글이 생긴 것을 확인할 수 있다. 개발 중 겪은 상황 기획 편에 나와있듯이 원래는 유저가 정조합을 설정할 수 있게끔 만들려 했었다. 물론, 함수로는 가능하게 만들었다. 이렇게 각 포지션에 인수를 주고, 유저그룹을 전달하면 조합이 배치된 유저그룹을 리턴하는 방식이다. 앱 내에서 자체적으로 만든 정조합은 4개로, - 2탱 1근 2원 - 2탱 3원 - 2탱 2원 1서폿 - 1탱 1근 3원 이 4개 중 어떤 조합도 만들 수 없다면 랜덤으..
[Unity] 사이퍼즈 파티 메이커 앱 개발기 - 구현 단계(2)
[Unity] 사이퍼즈 파티 메이커 앱 개발기 - 구현 단계(2)
2020.12.14이번에 추가된 기능만 언급하겠다. 1. 추가 검색 기능 유저 추가 시, 최근에 파티했던 유저도 자동으로 검색하여 추가할 수 있다. Toggle로 되어 있어 추가하고 싶지 않은 유저는 체크를 해제하면 된다. 편의 기능임에도 불구하고 본 기능보다 노력이 더 들어가는 걸 보면, 역시 UX는 골치아픈 것 같다 (...) 2. 설정 화면 기획대로 구현했다. 조합 초기화는 사라졌지만. 또한 플레이어 정보를 가져올 때, 포지션을 가져오면 API 호출 횟수가 너무 많아져서 설정 화면에 따로 빼두었다. 사이퍼즈 API의 경우 1초에 호출 한도가 정해져있는데, 이를 고려하기 위해 실패 시 API Call을 잠시 기다렸다가 수행하거나, 쿼리를 나누어 사용하는 등의 일을 해야 했다. 유저 포지션을 가져오려면 비용이 많이 들 ..
[Unity] 사이퍼즈 파티 메이커 앱 개발기 - 구현 단계(1)
[Unity] 사이퍼즈 파티 메이커 앱 개발기 - 구현 단계(1)
2020.12.11일단 기초적인 구현은 했다. 유저 추가, 유저 선호 반영, 랜덤 매칭, 유저 삭제 등의 기능이 구현되어 있는 것을 확인할 수 있다. 사이퍼즈 API와의 연동도 수행했는데, 내가 검색한 유저가 실제로 존재하는지 여부를 확인한다. 선호하는 유저끼리 매칭되게 하는 부분이 조금 골칫덩이였는데, 해당 유저들은 묶어서 그룹으로 만들었다. 인원이 많은 그룹부터 파티를 배정하는데, 현재 가장 인원이 적은 팀 쪽으로 이동하게 했다. 조건 중 아직 구현하지 못한 내용은 다음과 같다. 1. 탱커/근딜러/원딜러/서포터 포지션을 가능한 한 정조합으로 만들어 나누면 좋다. 2. 유저 이름과 포지션 정보를 설정할 수 있는 화면이 존재해야 한다. 3. 포지션 정보는 최근 플레이 정보를 수집하여 가져올 수도 있다. (사이퍼즈 오픈 A..
[Unity] 사이퍼즈 파티 메이커 앱 개발기 - 기획 단계
[Unity] 사이퍼즈 파티 메이커 앱 개발기 - 기획 단계
2020.12.11늘상 클랜원들과 사이퍼즈를 돌리곤 하는데, 요새는 사람이 5인보다 많아서 파티를 나눠야 할 지경이 되었다. 하지만 어떻게든 5인팟이 만들어지게끔 "오늘 나는 안하겠다"며 양보하려는 착한 클랜원들을 보며... 고마웠지만 답답한 건 어쩔 수 없었다. 그냥 파티를 나눠줬으면 해! 하지만 일반 뽑기나 사다리타기 앱은 여러 예외 조건이 있어 그닥 도움이 되지 않았다. 어쩌겠는가. 직접 만들기로 했다. 조건 1. 인원에 따라 파티를 나눠야 한다. (8인이면 4/4, 9인이면 4/5, 3/3/3 등) 2. 같이 붙어 있어야 하는 사람들을 붙여놓아야 한다. (ex : 커플, 나는 이 사람 없으면 게임 안 하는 유저들) 3. 탱커/근딜러/원딜러/서포터 포지션을 가능한 한 정조합으로 만들어 나누면 좋다. 4. 세로 화면 ..
[C#] WinForm으로 간단한 카운터 프로그램 만들기
[C#] WinForm으로 간단한 카운터 프로그램 만들기
2020.11.26개인적인 용도로 메모용의 카운터가 필요했는데, 가볍고 작게 만들어진 프로그램이 없어서 직접 만들기로 했다. 아래는 실제 구현된 결과이다. 필요 기능 정리 바탕화면에 둘 수 있는 작고 간편한 카운터를 원했기 때문에, 다음 기준을 만족시켜야 했다. - 좌클릭하면 증가 - 우클릭하면 감소 - 0으로 리셋 가능 - 원하는 숫자로 설정 가능 - 프로그램을 종료했을 때에도 마지막 숫자를 가져올 것 구현 윈도우 폼으로 구현했다. 간편하게 GUI 환경에서 프로그램을 만들 수 있어서 선호한다. 위쪽으로 Label을 배치하고, 아래에는 작은 pictureBox를 달았다. pictureBox를 눌렀을 때 메뉴가 뜰 수 있도록 contextMenuStrip을 배치했다. Reset을 클릭하면 카운터가 0이 되도록 메서드를 연결..
[Asset 제작 일지] 대화 시스템 만들기 14 : 선택지 시스템 업데이트
[Asset 제작 일지] 대화 시스템 만들기 14 : 선택지 시스템 업데이트
2020.10.12깃허브 이슈에 선택지 시스템 관련 요청이 와서, 스스로 생각했을 때도 필요한 기능이었으므로 업데이트했다. 1. DialogSelect/DialogSelectItem Class DialogData 하위에서 객체로 참조할 수 있도록 새 클래스를 만들었다. 내용은 사실상 Dictionary의 하위호환이다. DialogSelectItem은 string의 Key와 Value가 존재한다. DialogSelect에서는 이를 리스트로 만들어 참조하고, 추가한 순서대로 선택지를 표시한다. 그럼 왜 Dictionary로 구현하지 않았느냐? 나중에 JSON 데이터 입출력을 위해 시리얼화될지도 모르기 때문이다. SerializableDictionary 에셋 같은 걸 쓰면 간단하지만, 에셋스토어는 다른 에셋에 대한 의존성이 없..
[Asset 제작 일지] 대화 시스템 만들기 13 : 에셋 스토어 업로드
[Asset 제작 일지] 대화 시스템 만들기 13 : 에셋 스토어 업로드
2020.05.16에셋 스토어 업로드, 등록, 오류 업데이트 과정이 모두 끝났다. https://assetstore.unity.com/packages/tools/gui/d-dialogue-system-167312 D'Dialogue System | GUI 도구 | Unity Asset Store Use the D'Dialogue System from DoublSB on your next project. Find this GUI tool & more on the Unity Asset Store. assetstore.unity.com 올라간 링크! 훠우! 드디어 한 건 끝났다는 생각이 든다. 이 시스템 가지고 다시 개발을 시작해야겠군. 검토까지는 한달정도 걸렸다. 이번 글에서는 에셋을 업로드하기 위해 어떤 과정을 거쳐야 하는..
[Asset 제작 일지] 대화 시스템 만들기 12 : 프리팹 작업
[Asset 제작 일지] 대화 시스템 만들기 12 : 프리팹 작업
2020.04.20어, 우선. 애니메이션은 포기했다. 감각이 없었기 때문 (...) 어차피 State는 참조할 수 있게 되어 있으므로 에셋을 활용해서 유저가 만들 수 있을 것이다. 그렇고말고. 오늘은 별 건 아니고, 프리팹 작업을 했다. 에셋을 사용하고 싶다면, 유저는 DialogAsset이라는 프리팹을 씬에 넣기만 하면 된다. 그 후, Character 프리팹을 DialogAsset/Characters 하위에 추가한다. 다음으로는 Character 스크립트를 수정하기만 하면 끝이다. ^O^ 그리고 문제가 있어 조금 수정한 게 있다. #1 Character 참조의 불편함 Character 프리팹은 DialogAsset/Characters 하위에 들어가는데, 이를 참조하기 위해서는 스크립트에서 Character 자료형을 선..
[Asset 제작 일지] 대화 시스템 만들기 11 : 리팩터링
[Asset 제작 일지] 대화 시스템 만들기 11 : 리팩터링
2020.04.19이제 더러운 코드를 정리할 때가 왔다. 최근에 마틴 파울러의 리팩터링을 구매했고, 읽기 시작했다. 다는 아니지만. 책의 '3장 : 코드에서 나는 악취'파트를 참조해서, 이상한 부분을 찾아 고쳤다. 대상은 DialogBase.cs와 DialogManager.cs이다. 오늘은 11시쯤 시작해서, 새벽까지 좀 오랫동안 작업했다. #1 enum State의 기이한 이름 public enum State { Show, Texting, WaitForInput, Wait, Hide } - WaitForInput과 Wait의 모호함 - Show와 Texting의 모호함 >> Show, Wait는 쓰이고 있지 않은 State였다. 해당 enum을 지우고 생각해 보았다. 실제로, State는 실행, 대기, 비활성화의 3개만..
[Asset 제작 일지] 대화 시스템 만들기 10 : 태그 오류 해결하기
[Asset 제작 일지] 대화 시스템 만들기 10 : 태그 오류 해결하기
2020.04.17오우. 벌써 이 프로젝트 시작한 지 10일째라니. 생각한 것보다 에셋 제작 기간이 길어져 간다. 아무튼, 오늘은 정말로 size/color 동시 적용 오류에 대한 해결방법을 생각해서 왔다. color 태그를 닫을 때 size 태그도 동시에 닫는 것이다. 별건 아니지만 이걸로 해결될 것 같다. 백문이 불여일견이라고, 직접 짜고 난 다음에 돌아오겠다. #1 버그 해결 방법 dialogTexts.Add("/size:up/안녕. /size:down/내 이름은 /color:red/리/color:white/이다."); dialogTexts.Add("/color:white//size:80//color:green/이 구문에 오류가 있었지?"); dialogTexts.Add("하지만 해결했지."); 기존이라면 라는 식으..