전체 글 56

유니티 게임 개발 : 크레이지 아케이드 모작 제작기 - 3. 맵 구현과 기타 요소

앞서 모든 프리펩의 기능들을 구현했으니 맵을 디자인하면 1차적인 게임 빌드는 완성된다.이후 스테이지 클리어 혹은 게임 오버 시 패널을 생성하여 다음 스테이지 또는 시작 화면으로 이동할 수 있도록 하면 게임 흐름까지 모두 완성된다.마지막으로 배경음악을 삽입해 게임에 디테일 한 스푼을 추가하면 최종적으로 게임 제작 완성이다. 디자인이 완성된 맵의 모습은 다음과 같다(순서는 다음과 같다easy 1 stage, easy 2 stage, easy 3 stagenormal 1 stage, normal 2 stage, normal 3 stagehard 1 stage, hard 2 stage, hard 3 stage )  다음은 패널을 구현할 차례다. 위의 맵 이미지를 보듯 가장 먼저 제작한 패널은 유저 인터페이스다...

유니티 2025.01.06

유니티 게임 개발 : 크레이지 아케이드 모작 제작기 - 2. 구현

디자인 소스를 프리펩으로 제작하여 모두 저장했다. 게임 개발에 필요한 요소들은 모두 만들어졌으므로, 이제 원하는 기능과 흐름을 구현할 단계다. 스크립트를 사용하여 요소의 기능과 패턴을 부여하고, 게임의 흐름을 정할 수 있다. 프로젝트에서 사용되는 게임 요소들을 크게 나누면 다음과 같다.• 플레이어• 아이템• 몬스터• 보스• 물풍선• 물줄기• GameManager (게임의 흐름을 관장)• AudioManager (게임의 배경음악을 관장) 게임의 전체적인 흐름은 다음과 같다.1. 플레이어가 물풍선을 발사한다.2. 물풍선이 물체에 충돌하면 터지면서 물줄기를 생성한다.3. 물풍선, 물줄기에 닿은 박스는 사라지면서 해당 자리에 아이템을 생성한다.4. 블럭은 물풍선, 물줄기에 닿아도 사라지지 않는다.5. 물줄기에 ..

유니티 2025.01.06

유니티 게임 개발 : 크레이지 아케이드 모작 제작기 - 1. 디자인

2025년이 되어서야 유니티 개발 후기글을 작성한다.24년 2학기 중간고사가 끝나고 학회에서 프로젝트를 진행하긴 해야하는데 언제하지... 하다가 발등에 불이 떨어지면서 부랴부랴 시작했던 기억이 난다. 그동안 속으로만 해보고 싶었던 아이디어를 이번 프로젝트때 해야겠다고 느꼈다. 프로젝트 제목 : SOGANG ARCADE 모티브 : 넥슨 목적 : 각 단계 별로 스테이지를 클리어하여 점수에 따른 랭크 획득 총 제작 기간 : 11/30 - 12/3 (14일)• 11/21 - 11/24 : 에셋, 이미지, 랜더링, 애니메이션, 디자인• 11/25 - 12/2 : 스크립트 구현, 패널제작, 추가 디자인, 씬 구성• 12/3 : 최종 수정 및 빌드 제작 과정   1) 디자인 설계   2) 스크립트 구현   3) 단계..

유니티 2025.01.05

/<> 백준 16566번 : 카드 게임 (C언어)

https://www.acmicpc.net/problem/16566  철수가 낸 카드에 맞춰 민수는 효율적으로 카드를 내야 합니다. 우선 민수의 카드 배열을 오름차순으로 정렬해주고, 유니온 파인드(union-find)를 사용해주면 됩니다. 이때 부모 배열의 인덱스의 값을 카드의 숫자와 동일하게 초기화합니다. 즉 parent[i] = i 의 형태로 초기화합니다. 철수가 낸 카드보다 최소한으로 큰 카드를 내기 위해서 부모 배열을 업데이트할 때, 낸 카드의 부모를 오른쪽 숫자(인덱스)로 맞춰주면 됩니다. 이를 표로 통해 설명하자면, 다음과 같이 초기화를 완성한 상태입니다.인덱스1234567부모1234567 민수의 카드는 1부터 7까지 있고, 처음에 철수가 4를 냈다고 가정해봅시다. 그럼 민수의 카드 배열에서 ..

백준 2024.10.30

/<> 백준 30621번 : 어? 금지 (C언어)

https://www.acmicpc.net/problem/30621  다이나믹 프로그래밍(DP)를 사용하여 문제를 풀어주면 됩니다. 시간 배열이 1차원이므로 형태가 복잡하진 않습니다. 문제의 DP 규칙은 다음과 같습니다. 1. dp[i] = dp[i - 1] -> i번째 시간에 '어'를 외칠 수 없는 경우2. dp[i] = confuse[i] -> i번째의 혼란이 이전 최종 혼란보다 큰 경우3. dp[i] = dp[index] + confuse[i] -> i번째 시간에 '어'를 외칠 수 있는 경우 3번째 규칙을 판단하려면 이전 dp값들 중 가장 큰 누적 혼란을 가진 index를 찾아야 하는데, 선형 탐색은 시간 복잡도가 크므로 이분 탐색(binary search)을 사용해줍니다. dp[index]보다 c..

백준 2024.10.29

/<> 백준 20303번 : 할로윈의 양아치 (C언어)

https://www.acmicpc.net/problem/20303  유니온 파인드(Union-Find)와 다이내믹 프로그래밍(DP)을 이용하는 것이 큰 틀입니다. 처음에 DP를 사용하지 않고 문제를 풀어갔는데, 친구 그룹이 꼭 하나란 보장이 없기에 DP를 사용해야 되는 것을 깨달았습니다.. (ex. K = 8, 각각 3명, 4명씩 친구인 그룹의 총 사탕 합이 최대일 수 있음) 1. 아이들이 가지는 사탕 개수 배열, 유니온 파인드의 부모 배열, 루트를 중심으로 그룹에 속한 아이들의 수를 저장하는 사이즈 배열, 최대 사탕 수를 저장하는 dp 배열을 생성합니다. 2. 친구 관계를 입력받을 때마다 유니온 파인드를 통해 아이들의 관계를 정리합니다. 이때 하위 그룹을 귀속할 때 상위 그룹의 루트에 하위 그룹의 사..

백준 2024.09.30

/<> 백준 17404번 : RGB거리 2 (C언어)

https://www.acmicpc.net/problem/17404   문제와 흡사하게 다이나믹 프로그래밍(DP)을 사용하는 문제입니다.근접한 집들끼린 같은 색으로 칠하지 않아야 하는데, 추가로 처음 집과 마지막 집의 색도 달라야 합니다. 처음에 문제를 풀 때 첫번째 집의 색의 정보를 저장한 배열을 따로 만들어 DP를 실행할 때마다 새로 저장을 했습니다.  너무 복잡하고 연산이 뜻대로 되지 않았습니다. 다시 문제를 풀 때 dp[n - 1][i]의 처음 집 색을 구하고 n번째 집의 색을 다른 두 가지 중 cost가 낮은 색을 택하려고 했습니다. 하지만 처음 시도와 달리 첫 집의 색을 저장하지 않아 답이 안 나왔습니다. 그래서 처음부터 집 색을 하나 정하고, 그다음에 DP를 진행하여 마지막 집의 색을 처음 ..

백준 2024.09.11

/<> 백준 11729번 : 하노이 탑 이동 순서 (C언어)

https://www.acmicpc.net/problem/11729  하노이 탑의 이동 조건은 작은 원판 위에 큰 원판이 오지 않는 한에서 판을 이동시킬 수 있습니다.n개의 원판이 있을 때 반대 기둥으로 옮기는 움직임의 총횟수는 2^n - 1> 입니다. (원리는 생략...) 재귀 함수를 사용하여 문제를 풀 건데, 문제는 원판의 개수에 따라 이전 원판들이 이동하는 기둥이 달라집니다. 이를 해결하기 위해 각 함수마다 출발 기둥과 경유 기둥, 목표 기둥을 설정하여 각 원판마다 올바르게 움직임을 출력할 수 있도록 해줍니다.  #include void hanoi(int n, int start, int mid, int end) { if(n >= 2) { hanoi(n - 1, start, end,..

백준 2024.09.11

/<> 백준 2467번 : 용액 (C언어)

https://www.acmicpc.net/problem/2467  용액을 하나씩 정하여 합의 특성값이 0에 가장 가까운 페어 용액을 찾으면 됩니다. 이중 반복문으로 페어 용액을 탐색하기엔 시간 복잡도가 O(n^2)이 되므로 시간 초과가 뜰 것입니다. 이를 해결하기 위해 이분 탐색을 사용하면 되는데, 특정 페어 용액을 찾는 것이 아닌 합의 특성값이 최소가 되는 용액을 찾는다는 점에서 막혔습니다. 이를 해결할 방법으로 타겟 페어 용액을 특정 용액 * (-1)>으로 지정하고 이와 가장 가까운 페어 용액을 이분 탐색으로 찾아내면 됩니다.  #include #include int n;long double liq[100000];long double sum = 2000000000;long double l1, l2;..

백준 2024.09.06