전체 분류
프로그래머스/해시/완주하지 못한 선수
프로그래머스/해시/완주하지 못한 선수
2021.08.01https://programmers.co.kr/learn/courses/30/lessons/42576 강의 듣기 전 풀이 - Java로 풀이 - 꼴찌는 완주에서 제외 - 동명이인 존재 가능 - 완주하지 못한 선수의 이름 return 1) string, int 해시맵을 작성 2) 완주한 선수 이름이 call될 때마다 해시값에 +1 3) 참가자 선수 이름으로 반복, 해시값에 -1 4) -1을 수행할 때, 해시값이 0보다 크지 않다면 해당 이름 리턴 class Solution { public String solution(String[] participant, String[] completion) { String answer = ""; //해시맵 작성 java.util.HashMap hash = new java..
Unity TextMesh Pro Sprite : 이모티콘 및 아이콘을 런타임에 동적으로 생성 또는 변경하기
Unity TextMesh Pro Sprite : 이모티콘 및 아이콘을 런타임에 동적으로 생성 또는 변경하기
2021.08.01이번 프로젝트에서는 텍스트 사이에 아이콘을 넣어야 하는 경우가 있었다. TextMesh Pro가 Sprite Importer를 제공하므로, 쉬울 것이라고 생각했다. 실제로, 통합되어 있는 Sprite를 Multiple로 자르고 SpriteAsset을 생성하기만 하면 제대로 작동했다. 그러나, 내 프로젝트의 경우 번들이나 인터넷에서 다운받은 이미지를 아이콘으로 만드는 작업이 필요했다. TextMeshPro의 Sprite Asset을 만들기 위해서는 에디터를 통해서만 생성, 업데이트 할 수 있었기 때문에 고민이 깊었다. 이를 해결하기 위해 찾아보던 중, 아래의 게시글에서 다운로드한 이미지로 Sprite Asset을 만드는 절차에 대한 공식 답변을 찾아냈다. https://forum.unity.com/thre..
프로젝트 회고록 #1 : 21년 4-6월 Unity 외주
프로젝트 회고록 #1 : 21년 4-6월 Unity 외주
2021.07.23개요 4월부터 진행하던 외주 프로젝트가 끝이 났다. 정확히는 끝났다기보다는 계약 기간 이후 유지보수 기간이라, 소소하게 연락 오는 일들을 처리하고 있는 상태다. 마감일이 고정되어 있고, 그렇다고 해서 기간이 널널하지도 않았던지라 시간 관리나 리팩토링 부분에서 아쉬움을 느끼기도 했다. 아무튼 끝났으므로 미래의 나를 위해 이번 프로젝트에서 겪었던 문제상황과 그 해결 방법 등을 정리하고자 한다. 주요 문제상황 및 해결과정 - Android 10 지원 구버전과는 달리, Android 10에서는 제약사항이 늘어났다. 대표적으로 저장소 액세스 이슈가 있었다. 10 이상을 타겟팅하는 앱은 외부에 범위 지정 저장소(Scoped Storage)가 생긴다. 이로 인해 원하는 위치에 마음대로 접근할 수 없게 되었다. 이 때..
C# 연산자 오버로딩 : ==, Equals에서 null값 판단하기
C# 연산자 오버로딩 : ==, Equals에서 null값 판단하기
2021.03.24문제 상황 == 연산자를 오버로딩하고 사용하려 했는데, 문제가 발생했다. a == b 와 같은 구문에서 a나 b가 null인 경우를 판단할 수 없었기 때문이었다. public static bool operator ==(Stat a, Stat b) { if (a == null && b == null) return true; } 이와 같이 작성하게 되면, 스택 오버플로우가 발생한다. 이유는 당연하다. a == null인 구문도 연산자 오버로딩한 '==' 연산자를 사용하기 때문. 해결법 object.ReferenceEquals(object, object)을 사용하면 된다. Equals나 ==과는 달리, object.ReferenceEquals는 재정의할 수 없는 메서드이다. 이 메서드는 지정한 object의 ..
사이퍼즈 파티 메이커
사이퍼즈 파티 메이커
2021.01.13사이퍼즈를 플레이하다 사람이 많아 곤란해졌을 때, 손쉽게 파티를 나눠 보세요! ※ 사이퍼즈 공식 앱이 아닙니다. - 사람이 많을 때 간편하게 파티를 나눠요 - 추천 포지션 조합을 볼 수 있어요 - 커플·절친 유저들을 붙여서 조합을 구성할 수 있어요 이 앱은 (주)네오플에서 제공하는 OPEN API를 사용하여 개발했습니다. 구글 플레이스토어 링크 : play.google.com/store/apps/details?id=com.DoublsbSoft.CyphersPartyPicker
[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 UGUI InputField의 한글 입력 문제 해결하기
Unity UGUI InputField의 한글 입력 문제 해결하기
2020.12.15Unity의 UGUI에는 고질적인 한글 입력 문제가 있다. 예를 들면 아래와 같은 것. 이외에도 입력한 한글이 바로 Inputfield에 나타나지 않는 등의 문제가 많았다. 이 현상을 해결하려고 GUI TextField를 쓰는 등 다양한 짓을 해봤었으나, 최근 확실한 해결 방법이 나왔다. forum.unity.com/threads/inputfield-bugs-korean-language.728858/ Unity UI - InputField Bugs Korean Language WTF? can you see two bugs? How can I fix this? Please help. [MEDIA] forum.unity.com 본 링크에서 한국인 개발자분이 제보해주신 덕에 유니티 UI팀에서 업데이트를 했다...
[Unity] 사이퍼즈 파티 메이커 앱 개발기 - 구현 단계(2)
[Unity] 사이퍼즈 파티 메이커 앱 개발기 - 구현 단계(2)
2020.12.14이번에 추가된 기능만 언급하겠다. 1. 추가 검색 기능 유저 추가 시, 최근에 파티했던 유저도 자동으로 검색하여 추가할 수 있다. Toggle로 되어 있어 추가하고 싶지 않은 유저는 체크를 해제하면 된다. 편의 기능임에도 불구하고 본 기능보다 노력이 더 들어가는 걸 보면, 역시 UX는 골치아픈 것 같다 (...) 2. 설정 화면 기획대로 구현했다. 조합 초기화는 사라졌지만. 또한 플레이어 정보를 가져올 때, 포지션을 가져오면 API 호출 횟수가 너무 많아져서 설정 화면에 따로 빼두었다. 사이퍼즈 API의 경우 1초에 호출 한도가 정해져있는데, 이를 고려하기 위해 실패 시 API Call을 잠시 기다렸다가 수행하거나, 쿼리를 나누어 사용하는 등의 일을 해야 했다. 유저 포지션을 가져오려면 비용이 많이 들 ..
D'Dialogue System (대화창 시스템)
D'Dialogue System (대화창 시스템)
2020.12.14UGUI에서 사용할 수 있는 간단한 대화창 시스템입니다. 무료에요! 기능 - 텍스트 색, 크기, 속도 변경 - 텍스트 출력 중간에 캐릭터 스프라이트 변경 가능 - 원하는 타이밍에 사운드 재생 - 창 강제 닫기, 스킵 불가능 지원 - 선택지 시스템 예시 텍스트 출력 도중, String에 명령어를 넣는 것만으로 언급된 기능들을 손쉽게 사용할 수 있습니다. 자세한 사용 방법은 다운받은 에셋의 document 파일을 참조하거나, 깃허브 페이지를 열람하세요. 깃허브 페이지 유니티 에셋 스토어 페이지
[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. 세로 화면 ..