개발 일지
[암살 말고 암선행] 어떻게 만들었나
[암살 말고 암선행] 어떻게 만들었나
2024.03.03오랜만에 게임잼으로 알만툴 개인작을 냈다. 역시 제한된 기간을 줘야 뭐가 나오는 것 같다. 약 2주 동안 정말 출근한 것처럼 열심히 했다. 털털썩썩... 이번에 이렇게까지 열심히 한 이유는 왜냐, 나는 퇴사했으니까! 퇴사 후 약 6개월간의 게임 개발 기간을 가지기로 했다. 이번 게임잼은 내 스케줄링 능력 체크와 개발 능력 인지에 대한 감을 잡기 위해 참여했다. 하고 싶은 걸 다 하는 대신에, 나는 어디까지 할 수 있을 것인가? 실제로 감이 잡혔고, 6개월 동안 게임을 개발하는 데 많은 도움이 될 것 같다. 스케줄링 2주 동안 만들 수 있는 게임 규모 설정과 일정 관리를 위해 Notion과 Trello를 사용했다. 나는 뽀모도로 타이머를 애용하는 편인데, 25분을 일하고 5분을 쉬는 루틴으로 구성되어 있다..
프로젝트 회고록 #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. 세로 화면 ..
해치웠나(Did we get it) 제작일지 #05
해치웠나(Did we get it) 제작일지 #05
2020.11.28오늘은 제작일지라기보단 계획에 가깝다. SRPG이다보니 좌표 중심의 구현을 하려 하는데, 헷갈리는 게 한 둘이 아니라서 써보면서 생각하려 한다. 우선 이 맵부터. Size로는 10x5의 맵이다. 좌표계를 우측 모서리가 x라고 치고, 박스가 있는 위치를 말하면 (0, 3)이다. ...이것부터 좀 고통스럽다. 0부터 시작하는 좌표계로 연산을 하면 사람 머리에서 헷갈리고, 그렇다고 1부터 시작하는 좌표계로 연산을 하면 코딩할 때 헷갈린다. 일단은 1부터 시작하는 좌표계를 사용하려고 하는데, 미래에 버그가 많이 난다면 여백을 준비해뒀으니 불만을 토하길 바란다. 내가 보기엔 훗날 100퍼센트 이 아래에 뭔가 써질듯. 제정신이냐 타일과 오브젝트는 분리하여 구현해야 할 것 같다. 타일은 게임 실행 내내 변동되지 않는..
[C#] WinForm으로 간단한 카운터 프로그램 만들기
[C#] WinForm으로 간단한 카운터 프로그램 만들기
2020.11.26개인적인 용도로 메모용의 카운터가 필요했는데, 가볍고 작게 만들어진 프로그램이 없어서 직접 만들기로 했다. 아래는 실제 구현된 결과이다. 필요 기능 정리 바탕화면에 둘 수 있는 작고 간편한 카운터를 원했기 때문에, 다음 기준을 만족시켜야 했다. - 좌클릭하면 증가 - 우클릭하면 감소 - 0으로 리셋 가능 - 원하는 숫자로 설정 가능 - 프로그램을 종료했을 때에도 마지막 숫자를 가져올 것 구현 윈도우 폼으로 구현했다. 간편하게 GUI 환경에서 프로그램을 만들 수 있어서 선호한다. 위쪽으로 Label을 배치하고, 아래에는 작은 pictureBox를 달았다. pictureBox를 눌렀을 때 메뉴가 뜰 수 있도록 contextMenuStrip을 배치했다. Reset을 클릭하면 카운터가 0이 되도록 메서드를 연결..
해치웠나(Did we get it) 제작일지 #04
해치웠나(Did we get it) 제작일지 #04
2020.11.13에디터 제작 4일째. 기존에 MapMaker에서 MapTool을 분리해 클래스를 새로 만들고 정비했다. 결과, Tiles, Height, Object를 선택할 수 있게 되었다. Tiles에서 타일 색을 고르고, Height에서 타일의 높이를 선택, object에서 타일 위에 올릴 장식물을 선택할 수 있다. 그래서 이런 게 가능해졌다. 이제 나무도 오브젝트에 넣고, 길도 깔고 하는 등 대대적으로 내부 내용을 손 보면 되겠다. UI에 3D 오브젝트를 올리고 싶어서 이것저것 찾고 있었는데, 임시로 캔버스를 카메라에 렌더하도록 설정했다. forum.unity.com/threads/what-is-the-best-way-to-display-3d-models-as-ui-elements.343205/ 도움을 받은 게시..
해치웠나(Did we get it) 제작일지 #03
해치웠나(Did we get it) 제작일지 #03
2020.11.12오늘은 친구인 바모씨가 라이트 설정에 대해 알려줘서 적용하고 왔다. 컬러 스페이스는 두 가지로 나뉘어지는데, 리니어와 감마이다. 리니어에서 블렌딩 결과는 예상하는 결과 그대로지만, 감마에서는 채도와 밝기가 과도하게 높아진다고 한다. 따라서 리니어에서는 강한 빛 아래서의 색 표현을 훨씬 풍부하게 할 수 있다고 한다. 실제로 바모씨의 조언은 '아트님들이 라이트는 리니어로 하랬어!'였으니까, 리니어로 적용해보는게 낫겠다. 그러나 이런 그래픽적 이슈를 들고 왔을 때 언제나 궁금해지는 건 성능 이슈가 아니던가. forum.unity.com/threads/linear-vs-gamma-color-space-for-android.573175/ Linear vs Gamma color space for Android He..
해치웠나(Did we get it) 제작일지 #02
해치웠나(Did we get it) 제작일지 #02
2020.11.11에디터 개발 진행중이다. 위는 약식으로 테스트를 돌려 본 화면이고, 코드상에서는 에딧을 할 수 있도록 밑작업을 했다. 다만 현재 일일이 왼쪽 마우스로 타일을 클릭해야만 작동하는데, IPointerDown으로 진행했기 때문이다. 드래그해도 편집할 수 있도록 변경이 필요해 보인다. 타일의 높낮이를 설정하는 것도 필요한데, 이는 타일 변경과는 다른 방법으로 해야겠다. 게임에서 모딩을 지원하는 것이 아니기 때문에, 에디터는 나만 알아볼 수 있으면 될 듯 하다. 설-마 모딩을 지원할까. 그런 일은 일어나지 않았으면 좋겠다. 미래의 나. 코드 작업만 하면 실질적인 결과물은 많이 보여줄 수 없어서 아쉽다. Private로 작업하니까 코드를 올릴 수 있는 것도 아니고. 배칭 문제가 Static으로 해결되는지 알고 싶어..