점프 피하기 게임을 만들면서 화살 장애물을 떨어뜨리기 전에 바닥에 미리 경고 영역(장판)을 보여주는 연출이 필요했습니다.플레이어 입장에서는 어디로 피해야 하는지 알 수 없으면 그냥 맞는 느낌이 들기 때문에, 화살이 떨어지기 전에 "여기 위험해" 라는 시각 신호를 줘야 했습니다.그래서 이번에는 장판 Fill 연출을 담당하는 TrapArea와 이를 실제로 제어하는 Obstacle_Arrow를 나눠서 구현했습니다.1. 전체 흐름전체 구조는 단순합니다.Obstacle_Arrow.Setup() 이 호출되면 비동기로 연출 시작TrapArea.PlayFill() 이 duration 동안 장판을 0 → 1로 채움Fill이 완료되면 화살이 낙하 시작(StartFall())화살이 플레이어와 충돌하면 게임 오버텔레그래프 역..
자세히 보기 →점프 게임을 만들다 보면 분명히 유저 입장에서는 점프를 눌렀다고 생각했는데, 실제로는 입력이 씹히는 경우가 있었습니다.예를 들어 착지 직전에 점프 버튼을 조금 빨리 눌렀는데 아직 지면 판정이 나지 않아 점프가 실행되지 않거나, 반대로 발판 끝에서 점프를 눌렀지만 물리적으로는 이미 공중으로 판정되어 점프가 되지 않는 경우가 있었습니다.이런 상황이 반복되면 유저는 조작이 뻑뻑하다고 느끼게 됩니다.그래서 이번에는 점프 입력을 조금 더 관대하게 처리하기 위해 점프 버퍼와 코요테 타임을 적용했습니다.1. 코요테 타임 / 점프 버퍼 개념먼저 두 기능은 비슷해 보이지만, 실제로는 보정하는 방향이 다릅니다.점프 버퍼(Jump Buffer) 는 점프가 가능한 시점보다 조금 빨리 눌린 입력을 잠깐 저장해두는 기능입니다.예..
자세히 보기 →위와 같이 상점에서 잠금 상태의 캐릭터나 맵을 실제 3D Object를 보여주는 Preview를 만들고 싶었습니다.왜냐하면 어떤 느낌인지 대략적으로 알 수 있지만 Material을 검정색으로 처리해 호기심을 유발하고 싶었기 때문입니다. Preview를 만들기 위해서 Render Texture를 사용했었는데 Render Texture를 쉽게 말하면 카메라가 렌더링한 결과를 화면이 아니라 텍스처에 저장하는 기능입니다. 보통 카메라는 Game View에 바로 그리지만, 위에 경우에는 previewCamera를 따로 둬서 previewCamera.targetTexture를 미리 생성해둔 Render Texture로 연결해두면 이 카메라가 그린 결과는 Game View가 아니라 연결해둔 Render Texture..
자세히 보기 →앱내에서 다국어를 지원하기 위해 Unity에서 제공하는 Localization Packag를 사용했습니다. 포스팅 순서는 1. 설치 순서 -> 2. Localization 생성 -> 3. Localization 셋팅 -> 4. Localization 적용 순으로 진행하겠습니다. 1. 설치 순서1. [Window] -> [PackageManagement] -> [PackageManager] 를 선택합니다.2-1 좌측에 [Unity Registry] 를 선택 후 검새창에 Localization을 검색해서 Install 합니다.2-2. 만약에 없는 경우 왼쪽 상단에 [+] 버튼을 클릭후 [Install package from git URL] 을 선택합니다.3. 입력창에 [ com.unity.localizati..
자세히 보기 →이번에 새롭게 게임을 만들기 시작하면서 2D 횡 기준으로 무한으로 맵을 사용할 수 있는 기능이 필요했습니다. 자료 조사들을 해보니 sprite 기준으로 된 예시들이 많아서 sprite들의 position 값을 바꿔주면서 마지막 sprite에 다시 붙이는 방법과, 카메라 이동을 기준으로 sprite의 position 값을 바꿔주는 방법을 써보게 됐습니다. 카메라 이동을 기준으로 했을 때는 단순 이미지로 진행하였고, sprite 이동을 기준으로 했을 때는 Parallax 방식으로 진행했습니다.Parallax : 거리에 따른 상대적 속도를 활용한 기술 1. sprite 이동사용 에셋 : https://assetstore.unity.com/packages/2d/environments/free-2d-cartoon..
자세히 보기 →문제 설명 : △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N번의 참가자끼리 게임을 진행합니다. 각 게임에서 이긴 사람은 다음 라운드에 진출할 수 있습니다. 이때, 다음 라운드에 진출할 참가자의 번호는 다시 1번부터 N/2번을 차례대로 배정받습니다. 만약 1번↔2번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받게 됩니다. 게임은 최종 한 명이 남을 때까지 진행됩니다. 이때, 처음 라운드에서 A번을 가진 참가자는 경쟁자로 생각하는 B번 참가자와 ..
자세히 보기 →문제 설명 : 1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다.1. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다.2. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다.3. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다. 4. 이전에 등장했던 단어는 사용할 수 없습니다.5. 한 글자인 단어는 인정되지 않습니다 . 끝말잇기를 계속 진행해 나가다 보면, 3번 사람이 자신의 세 번째 차례에 말한 tank 라는 단어는 이전에 등장했던 단어이므로 탈락하게 됩니다. 사람의 수 n과 사람들이 순서대로 말한 단어 words 가 매개변수로 주어질 때, 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신..
자세히 보기 →문제 설명 : 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때,효진이는(1칸, 1칸, 1칸, 1칸)(1칸, 2칸, 1칸)(1칸, 1칸, 2칸)(2칸, 1칸, 1칸)(2칸, 2칸)의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다. public class Solution { public long solution(int n) { if (n == 1) return 1; if ..
자세히 보기 →문제 설명 : 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요. public class Solution { public int solution(int[] arr) { int result = arr[0]; for (int i = 1; i 최소공배수를 구할 때 a * b / GCD(a,b)를 하는 이유ex) a = 12, ..
자세히 보기 →문제 설명 : 경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하고 싶습니다. 예를 들어, 경화가 수확한 귤 8개의 크기가 [1, 3, 2, 5, 4, 5, 2, 3] 이라고 합시다. 경화가 귤 6개를 판매하고 싶다면, 크기가 1, 4인 귤을 제외한 여섯 개의 귤을 상자에 담으면, 귤의 크기의 종류가 2, 3, 5로 총 3가지가 되며 이때가 서로 다른 종류가 최소일 때입니다. 경화가 한 상자에 담으려는 귤의 개수 k와 귤의 크기를 담은 배열 tangerine이 매개변수로 주어집니다. 경화가 귤 k개를 고를 때 크..
자세히 보기 →문제 설명 : OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈트는 건전지로 작동되는데, 순간이동을 하면 건전지 사용량이 줄지 않지만, 앞으로 K 칸을 점프하면 K 만큼의 건전지 사용량이 듭니다. 그러므로 아이언 슈트를 착용하고 이동할 때는 순간 이동을 하는 것이 더 효율적입니다. 아이언 슈트 구매자는 아이언 슈트를 착용하고 거리가 N 만큼 떨어져 있는 장소로 가려고 합니다. 단, 건전지 사용량을 줄이기 위해 점프로 이동하는 것은 최소로 하려고 합니다. 아이언 슈트 구매자가 이동하려는 거리 N이 주어졌을 때, 사용해야 하는 건전지 사용량의 최솟값을 retu..
자세히 보기 →문제 설명 : Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다. Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.제한사항 : 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.public class Solution { public int[] solution(int brown, int yellow) { ..
자세히 보기 →