분류 전체보기
-
Hitbox with DNFTransform게임 클라이언트 개발/MakeDNF 2023. 12. 2. 00:28
카메라를 회전하지 않고 2.5D 좌표계를 구현함에 따라 Unity의 Collider를 사용하여 충돌 기능을 구현할 경우, 불필요한 충돌 연산을 수행한다. 예를 들어, 아래 그림과 같이 캐릭터와 파이어볼이 위치한다면, DNFTransform의 XZ평면에서 캐릭터와 파이어볼의 Collider가 서로 충돌하지 않았기 때문에 충돌 검사 로직을 수행할 필요가 없다. 하지만 캐릭터가 점프할 경우 두 Collider가 충돌하기 때문에 불필요한 충돌 연산이 수행된다. Hitbox 이를 방지하기 위해 Hitbox를 직접 구현했다. Size, Offset, Pivot 세 가지 변수를 통해 Hitbox를 설정하였다. Size : Hitbox의 크기를 설정한다. Hitbox의 모양이 Circle일 경우 Z값은 무시된다. Si..
-
2.5D 좌표계, DNFTransform게임 클라이언트 개발/MakeDNF 2023. 12. 1. 23:07
이번 글에선 유니티의 Transform 컴포넌트를 활용하여 2.5D 좌표계를 직접 구현한 DNFTransform 컴포넌트와 이를 위한 툴을 개발한 내용에 대해 작성할 것이다. 2.5D란?2.5D란 2D 이미지를 3D로 표현한 좌표계를 뜻하며, X 축, Y 축 방향만 이동가능한 2D에 가상의 Z 축을 추가하여 3D처럼 표현하는 기법이다. 던전 앤 파이터(이후 던파라고 지칭)는 이러한 기법이 적용된 횡스크롤 게임으로, 유니티로 이를 구현하기 위해선 2.5D 좌표계를 직접 구현할 필요가 있다. 오브젝트 Hierarchy를 활용해 구현한 2.5D기존 프로젝트에선 오브젝트 Hierarchy를 활용하여 DNFTransform 클래스를 구현했었다. 오브젝트 Hierarchy는 다음과 같이 구성되어 있다. XZ 평면을..
-
프로젝트를 시작하기 전에게임 클라이언트 개발/MakeDNF 2023. 11. 29. 16:13
프로젝트 깃허브 https://github.com/woghrk12/MakeDNF.git GitHub - woghrk12/MakeDNF Contribute to woghrk12/MakeDNF development by creating an account on GitHub. github.com 게임 클라이언트를 공부하면서 가장 좋아하는 게임을 개발해 보는 것은 매우 좋은 경험이라고 생각한다. 이전에 짧은 기간동안 던전 앤 파이터의 전투 시스템을 구현해보며, AABB 충돌 알고리즘도 공부해보고, 객체 지향 설계도 공부하고, 기본 공격과 4종류의 스킬을 구현해보며 약소하지만 던전 앤 파이터와 같은 조작감을 느낄 수 있었다. 다만, 게임은 개발도 중요하지만 그래픽이나 오디오 또한 매우 중요한 요소로 작용하며, 혼..
-
백준 6064 : 카잉 달력백준 2023. 11. 29. 16:05
1. 문제 : https://www.acmicpc.net/problem/6064 6064번: 카잉 달력 입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다. www.acmicpc.net 2. 문제 접근 해가 지날 수록 $x$와 $y$에 $1$을 더함. $x$와 $y$는 현재 해를 각각 $M$과 $N$으로 나눈 나머지임. 두 수의 최소 공배수를 주기로 $x$와 $y$가 반복됨. 완전 탐색으로 모든 수를 탐색할 경우 int 타입의 최댓값은 약 20억이므로 시간 초과. $x$, $y$ 중 하나를 기준으로 최소 공배수까지 탐색. 3. 문제 해결 1. $M$과 $N$의 최대 공..
-
길찾기 알고리즘과 최적화게임 클라이언트 개발/Unity 2023. 11. 27. 22:33
Unity를 활용하여 AI나 자동으로 길을 찾는 기능을 구현할 경우, 3D는 Nav Mesh Component를 활용하면 된다. 직접 구현하는 것보단 해당 Component를 쓰는 것이 웬만해선 훨씬 빠르고 최적화가 잘 되어있다. 다만 2D를 개발하는 경우 해당 Component를 사용할 수 없어 길 찾기 알고리즘을 직접 개발해야 한다. 이에 길 찾기 알고리즘에 대해 알아보고 최적화하는 과정을 작성하고자 한다. 구현한 알고리즘의 코드는 깃허브에서 확인할 수 있다. https://github.com/woghrk12/AStarAlgorithm.git GitHub - woghrk12/AStarAlgorithm Contribute to woghrk12/AStarAlgorithm development by cre..
-
백준 5014 : 스타트링크백준 2023. 11. 27. 14:58
1. 문제 : https://www.acmicpc.net/problem/5014 5014번: 스타트링크 첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다. www.acmicpc.net 2. 문제 접근 각각의 위치를 노드라고 생각한다면 그래프로 표현할 수 있음 -> 그래프 탐색 적어도 몇 번 눌러야하는가 -> 최소한 몇 번 눌러야하는가 -> 최단 거리 탐색 -> BFS 3. 문제 해결 중복 노드 방문을 방지하기 위한 벡터 초기화 시작 노드부터 BFS 탐색 노드에서 다른 노드로 이어지는 간선은 총 2개 위로 몇 층 이동할 수 있는지에 대한 U 아래로 몇 층 이동할 수 있는지에 대..
-
String MatchingCS/알고리즘 2023. 11. 23. 15:33
String Definition : A sequence of characters $P$ : Patttern string of size $m$ Pattern Matching Problem : Given strings $T$ (text) and $P$ (pattern), find a substring of $T$ equal to $P$ Brute-Force Algorithm Compare the pattern $P$ with the text $T$ until either a match is found, or all placements of the pattern have been tried Input : text $T$ of size $n$ and pattern $P$ of size $m$ Output : s..
-
Dynamic ProgrammingCS/알고리즘 2023. 11. 22. 21:50
Dynamic Programming of a Recursive Algorithm Trade space for speed by storing solutions to sub-problems rather than re-computing them Find solutions in a dicionary(table), say soln Before any recursive call, search dictionary Before returning the solution, store it in the dictionary soln Example : fib fibDPwrap(n) Dict soln = create(n); return fibDP(soln, n); fibDP(soln, k) int fib, f1, f2; if (..