전체 글

개발/수학

[Mathematics] 8. 좌표계 변환

어떤 좌표계A에서 좌표계B로 좌표를 이동시키거나 그 반대로 이동시키는 방법을 나타내면 다음과 같다. 위 예시에서는 Our coordinates는 기본적인 3차원 좌표계이며 Jennifer's coordinates는 기본 좌표계에서의 벡터 (2,1), (-1,1)을 basis 혹은 기저벡터로 하는 좌표계이다. 이때 Jennifer의 좌표계에서 표현된 어떤 좌표를 우리 좌표계의 표현방식으로 표현하려면 위처럼 jennifer의 기저벡터를 행렬A로 표현한 후 A에 좌표를 곱해주면 된다. 반대로 우리 좌표계에서의 좌표를 Jennifer의 좌표계에서 표현하려면 A의 역행렬에 좌표를 곱해주면 된다. 참고: https://youtu.be/P2LTAUO1TdA (영상 후반부의 다른 좌표계로의 rotation을 하는 법도..

개발/수학

[Mathematics] 7. Billboarding

둠이나 단간론파처럼 스프라이트가 2D이지만 게임 저체는 3D인 환경에서 스프라이트가 항상 플레이어를 바라보도록 하려면 어떻게 해야할까? 플레이어, 그리고 스프라이트의 3차원 상의 위치가 주어졌다고 가정하자. (E, P) 일단 스프라이트에서 플레이어로 향하는 방향을 구하면 F = P - E 이다. 이걸 구하면 우리는 플레이어의 시야와 스프라이트가 우측으로 90도를 이루는 R벡터를 구할 수 있다. 어떤 두 벡터를 외적하면 그 두 벡터 모두에 수직인 벡터를 구할 수 있다는 것을 우리는 이미 한 차례 다뤘었다. R = F x (0,1,0) (여기서 F와 외적중인 벡터가 (0,1,0), 즉 global한 up vector임을 기억하자. U벡터는 스프라이트 자체의 상대좌표계상에서의 up벡터를 의미한다.) 이제 F와..

개발/수학

[Mathematics] 6. 총알 소리 (Bullet whizzes)

총알이 어떤 경로를 따라 발사되었을때 주변의 플레이어에게 총알이 바람을 가르는 소리를 들려주려고 한다. 이때 음원의 위치는 어디가 되어야 하는가? 플레이어의 위치를 P, 총알의 발사경로를 a, proj a b를 b프라임이라고 할때 우리는 간단한 벡터 연산을 통해 a와 b와 세타각을 이용해 b프라임을 표현 가능하다. (b 프라임이 음원의 위치이다.)

개발/수학

[Mathematics] 5. AABB Intersection

삼각형의 닮음 성질을 이용해 어떤 벡터와 x,y 축에 평행한 변을 가진 사각형의 collision check를 하는 방법이다. 3차원에서도 여기서 축 하나만 더 추가하면 같은 원리로 판정이 가능하다. 만약 사각형이 축에 평행하지 않다면 어떻게 해야 할까? 뒤에서 다루는 내용인 사각형의 각 좌표에 TRS Matrix를 곱해주어 사각형이 회전한 상태라고 가정해보자. 이 상태에서 어떤 벡터(직선)와의 충돌을 판정하려면 단순히 이 사각형을 다시 축에 평행하게 이동시키고, 이 벡터도 동일한 상대적 위치를 유지하도록 이동시켜주면 된다. 정리하면, 각 변이 축에 평행하지 않은 사각형과 어떤 벡터의 충돌을 판정하려면, 사각형의 꼭짓점들과 판정하려는 벡터에 TRS의 역행렬, 즉 S^-1 * R^-1 * T^-1을 곱해주..

개발/수학

[Mathematics] 4. Interpolation

t1~t2동안 s1~s2 사이를 움직이게 하는 함수 Remap(t)를 구하는 방법: 두 개의 함수로 분할한다

개발/수학

[Mathematics] 3. 벡터의 외적

이전글에서 오일러각을 이용해 플레이어 카메라의 방향벡터를 구할 수 있었고, 그 벡터의 x, z 성분이 플레이어의 평면 상에서의 방향벡터라는 것도 알 수 있었다. 이때 플레이어의 평면 상의 방향벡터가 forward 벡터가 된다. FPS에서 W나 S를 누르면 바라보는 방향으로 이동하는데, 즉 플레이어의 속도= forward 방향*스칼라*캐릭터 이동속도 가 된다. (여기서 스칼라 값은 W를 눌렀는지 S를 눌렀는지에 따라 결정되며 보통 W를 1, S를 -1로 둔다. 조이스틱에선 조이스틱을 기울인 정도까지 고려해 -1~1 사이의 값을 줄 수 있다.) 마찬가지로 A나 D를 누르면 속도 = right방향*스칼라*캐릭터 이동속도 가 된다. (이 경우엔 D가 1, A가 -1) 종합하면 플레이어의 xz평면 상에서의 was..

개발/수학

[Mathematics] 2. Euler angle

오일러각은 어떠한 3차원 회전을 세 개의 값으로 표현하는 방법이다. 각 값은 pitch, yaw, roll이며 다음과 같이 쉽게 이해가 가능하다 pitch: 고개를 위아래로 들었다내렸다 하는것 yaw: 고개를 좌우로 도리도리 roll: 머리를 어깨 쪽으로 까딱까딱 (뭔가 잘 이해가 안 갈때 하는 동작처럼) FPS 게임에 대입하면 마우스의 x는 yaw, y는 pitch에 대응된다. 오일러각을 원점에서 시작하는 3차원 벡터로 변한할 수 있다. (fps의 경우 플레이어 카메라의 방향벡터) 플레이어가 서있는 평면이 xz평면이라고 생각하면 공식은 다음과 같다. (p,y,r) -> (vx,vy,vz) vx = cos y * cos p vy = sin p vz = sin y * cos p (vx, vz) 가 플레이어..

개발/수학

[Mathematics] 1. Delta time

게임과 수학 카테고리의 포스트들은 학습 기록용으로 작성중이기 때문에 글이 정돈되지 않을 수 있다는 점 양해 부탁드립니다🙏 본 카테고리의 글들은 Dunn and Parberry의 책 에서 다루는 내용들 위주로 작성되고 있습니다. 30 fps인 게임에서의 dt(delta time)는 1/30s이다. 어떤 오브젝트의 현재 변위를 s, 현재 속도를 v, 다음 프레임에서의 변위를 s' 이라고 했을 때 s' = s + dt * v이다. 마찬가지로 현재 속도를 v, 현재 가속도를 a, 다음 프레임에서의 속도를 v'이라고 했을 때 v'=v + dt * a 이다.

게임 제작/Geophyte (2020~2021)

Geophyte 알파 버전 릴리즈!

지오파이트 게임 소개 - 링크 Geophyte by gamesm1th Open-source classical roguelike/오픈소스 로그라이크 게임 gamesm1th.itch.io 드디어 지오파이트 알파 버전을 공개합니다! 아직 콘텐츠 볼륨이 부족한 감이 있지만 곧 입대를 앞두고 있어서 한동안 추가 콘텐츠 제작은 어려울 것 같습니다.. ㅠ 그래도 알파 버전까지는 어찌어찌 마무리짓고 가서 정말 뿌듯하네요 고전 로그라이크 특성상 기존에 로그라이크 장르에 익숙하지 않으신 분들은 약간 헤매실 수도 있는데 캐릭터 생성 후 ESC 키 누르셔서 도움말과 조작키를 확인하실 수 있습니다 언어 설정이 영어로 되어있다면 타이틀에서 O키를 눌러서 옵션에 들어가 변경하실 수 있습니다 버그나 기타 건의사항은 아래 링크에 남겨..

게임 제작/아드레날린 러시 (2021)

아드레날린 러시 소개

게임 제목: 아드레날린 러시 (Adrenaline Rush)장르: 아케이드 / 터널형 러시개발 일자: 2021. 08.16 . ~ 09. 24.소요시간:기획 및 프로토타이핑 1주개발 및 FGT 4주QA 1주개발 엔진: 유니티 (URP)개발 언어: C#게임 링크:구글 플레이스토어에서 다운받으실 수 있습니다. 아드레날린 러시 - Google Play 앱귀여운 적혈구가 되어 장애물을 피해 빠르게 혈관을 질주하세요!play.google.com소스 코드:https://github.com/TEAM-EvenI2/AdrenalineRush GitHub - TEAM-EvenI2/AdrenalineRushContribute to TEAM-EvenI2/AdrenalineRush development by creating a..

게임 제작/아드레날린 러시 (2021)

6주간 게임 개발 협업을 해보며 느낀 점들

저는 혼자 게임을 만드는 것을 좋아합니다. 기획, 개발, 아트 할 것 없이 다양한 분야에서 마음껏 제가 가진 다양한 능력들을 모두 발휘해 자유롭게 상상의 나래를 펼칠 수 있기 때문입니다. 하지만 취미로서의 게임 개발이 아닌 직업으로서의 게임 개발을 고민할 때마다, 마음 속에 떠오르는 질문 한 가지가 항상 저를 괴롭혔습니다. 만약 누군가와 함께 협업하게 되어 모든 것을 자유롭게 만들 수 없는 상황이 온다면, 그때도 나는 게임 개발을 즐길 수 있을까? 게임 개발을 취미로 삼을지 진로로 삼을지, 제 앞으로의 미래를 설정하는 데 있어서도 많은 영향을 줄 수 있는 중요한 질문이었지만 생각보다 게임을 누군가와 함께 만들어볼 기회는 많지 않았고, 저는 이 질문에 확실한 답을 내리지 못하고 있었습니다. 그러던 중 우연..

게임 제작/Geophyte (2020~2021)

[Geophyte] 버그 원인을 파악하기까지의 사고의 흐름

지오파이트 게임 소개 - 링크 얼마전에 흥미로운 버그가 발생했습니다 심할 때는 고치는데 이틀도 걸리는 버그도 있는 것에 비하면 이 버그는 그리 해결하기 어려운 버그는 아니었지만 그 원인을 찾아나가는 과정이 꽤 흥미롭다고 생각이 들어서 이렇게 글로 남겨보려고 합니다. 지오파이트에서는 플레이어가 계단을 따라 한 층 내려갈 때 (혹은 올라갈 때) 플레이어 주변 인접한 몬스터들이 플레이어를 따라 던전을 내려가기를 원한다면 플레이어를 뒤따라 던전을 내려가는 행위가 가능합니다. 예를 들어 보자면 다음과 같습니다 플레이어 - @, 몬스터 - O, m, n . m . . . . . O . . . m @ . . m . m m . . . . . < 지하 1층 (플레이어는 몬스터들에게 쫓기고 있다. 플레이어가 ..