캐릭터들이 부딪혀도 서로 자연스럽게 비켜서는 원인

캐릭터들이 부딪혀도 서로 자연스럽게 비켜서는 원인이라는 제목이 써져있는 썸네일

좁은 문 하나로 캐릭터 여러 명이 한꺼번에 몰려드는 장면을 상상해보면 다들 정확히 같은 출구 지점을 목표로 움직이고 있습니다. 목표 지점만 보고 일직선으로 걷게 하면 이론상으로는 전부 같은 좌표에 겹쳐서 도착하는 것이 보통의 경우입니다. 그러나 실제 게임에서는 캐릭터들이 서로 몸을 슬쩍슬쩍 피하면서 자연스럽게 흩어져 지나가게 되는데요. 이 차이를 만드는 것은 물리 엔진의 충돌 처리가 아닌 “분리 … 더 읽기

게임 스피드런 버그가 가능한 이유

스피드런 버그 원인 썸네일

게임에서 스피드런 영상을 보고 있으면 캐릭터가 벽을 뚫고 지나가는 현상이나, 있어서는 안 되는 장소로 순간 이동하는 장면을 볼 수 있는데요. 이번 포스팅에서는 이런 버그가 우연으로 일어나는 것이 아니라 게임 코드의 허점이 원인이라는 것을 실제로 프로토타입을 만들어 재현해보면서 확인해보겠습니다. 1. 스피드런 버그의 세 가지 유형 스피드런 관련 게임 커뮤니티에서 찾아내는 버그는 크게 3가지가 있는데요. 숫자가 최대값을 … 더 읽기

게임 속 사격 중에 이동 속도가 느려지는 사유

게임 속 사격 중에 이동 속도가 느려지는 사유라는 제목이 적힌 썸네일

캐릭터의 이동 속도에 영향을 주는 상태를 4종류만 넣어도 조합마다 값을 따로 정하는 방식은 36개의 숫자가 필요했고 배율을 곱하는 방식은 10개면 족했습니다. 자세/사격 상태/장비 무게/부상 여부 이 4가지 상태가 겹쳐도 이동 속도가 항상 일관되게 감소하는 이유는 바로 이 10개짜리 배율 구조, 이른바 상태 기반 이동 배율 덕분이라고 할 수 있는데요. 아래에서 이에 대해 자세히 알아보도록 하겠습니다. … 더 읽기

죽는 애니메이션 중에 리스폰을 누르면 어떻게 될까?

죽은 애니메이션 중에 리스폰을 누르면 어떻게 될까 글의 썸네일

캐릭터가 죽고 화면에 사망 애니메이션이 나오는 도중에 성격이 급한 플레이어가 리스폰 버튼을 연타하는 경우가 있습니다. 이때 게임에 따라서 캐릭터가 사망 포즈를 갖추기 전에 살아나는 경우도 있고 그렇지 않은 경우도 있는데요. 이는 우연이 아니라 리스폰 입력을 처리하는 방식의 설계 차이입니다. 이번 글에서 이 2개의 방식을 파이썬 프레임 시뮬레이션을 통해 직접 검토해보겠습니다. 1. 사망 애니메이션도 게임의 일부 … 더 읽기

일시정지를 눌러도 이펙트만 계속 움직이는 까닭

일시정지를 눌러도 이펙트는 계속 움직이는 까닭에 대한 글의 썸네일

게임에서 일시정지를 눌렀는데도 불구하고 가장자리 이펙트나 불꽃 파티클이 계속 움직이는 것을 본 적이 있을텐데요. 버그처럼 보일 수 있지만 사실은 아닙니다. 이건 개발자가 의도적으로 설계한 결과이고 그 뒤에는 “게임 시간이 하나가 아니라 두 개”라는 숨겨진 사실이 있습니다. 이번 글에서 이 구조를 파이썬 시뮬레이션을 통해 검증해보겠습니다. 게임 속 시간은 두 개다 게임 엔진은 대개 시간을 두 개로 … 더 읽기

캐릭터는 어떻게 절벽에 매달릴까?

캐릭터는 어떻게 절벽에 매달릴까 글에 대한 썸네일

같은 게임에서 같은 절벽에 매달리는 상황인데도 불구하고 어떨 때는 손이 허공에 뜨거나 벽 속으로 살짝 파고든 것처럼 보이고 어떨 때는 정확히 모서리를 잡고 있는 것처럼 보인 적이 있을 것입니다. 이 차이는 게임의 퀄리티 문제가 아닌 캐릭터가 절벽으로 다가가는 속도에 따라 실제 충돌하는 위치가 다르기 때문에 생기는 문제인데요. 이번 글에서 이 문제와 그 해결책인 렛지 스냅(Ledge … 더 읽기

캐릭터가 계단 오를 때 왜 통통 튀지 않을까?

캐릭터가 계단 오를 때 왜 통통 튀지 않을까 글에 대한 썸네일

게임에서 작은 맵에 계단 몇 개를 넣고 걷게 했더니 예상과 전혀 다른 일이 벌어졌는데요. 5cm짜리 낮은 턱 앞에서 캐릭터가 마치 거대한 벽에 부딪힌 것처럼 그 자리에 딱 멈춰진 것입니다. 실제 사람이라면 성큼 넘어갈 높이인데 캐릭터는 한 발자국도 나아가지 못했습니다. 원인을 찾아보니 이건 물리 충돌 처리 방식 자체의 문제였습니다. 이번 포스팅에서 이에 대해 자세히 알아보겠습니다. 충돌 … 더 읽기

동일한 컨트롤러인데 왜 게임마다 반응속도가 다를까?

이번 글의 썸네일

패드나 마우스는 그대로 두고 게임만 다른 걸 했을 뿐인데 한쪽에서만 두드러지게 입력이 훨씬 빠르게 느껴지는 경험을 한 적이 있으실텐데요. 정말로 그런 차이가 생기는 것이 맞는지 직접 실험을 해보았는데 직접 파이썬으로 30만 번 돌려보고 나니 “아 이래서 차이가 느껴졌구나.”라고 납득이 가더군요. 똑같이 1000Hz로 폴링되는 컨트롤러를 사용한다고 가정하더라도 게임이 그 입력을 30fps 렌더링 주기 안에서만 체크하면 평균 … 더 읽기

로딩 화면 미니 게임의 숨겨진 비밀

로딩 화면 미니 게임의 숨겨진 비밀 글에 대한 썸네일

옛날 격투 게임이나 레이싱 게임을 하다 보면은 로딩 화면에서 미니 게임이 뜨는 경우가 있습니다. 단순하게 이용자의 편의를 위한 서비스처럼 보일 수 있지만 이건 로딩이라는 작업의 구조적인 특성 덕분에 공짜로 가능해지는 것에 가깝습니다. 이번 포스팅에서 해당 구조를 직접 코드로 재현해서 확인해보겠습니다. 1. 로딩은 대체로 기다리는 시간이다 게임이 로딩 화면에서 하는 일들은 대체로 네트워크나 디스크에서 모델, 텍스처, … 더 읽기

공간 분할로 게임 유닛 최적화해보기

공간 분할로 게임 유닛 최적화해보기 글의 썸네일

시티즈:스카이라인이나 심시티 같은 도시 시뮬레이션 게임을 확인해보면 수백, 수천 개의 시민과 건물이 같은 시각에 움직이는데도 게임이 스탑되지 않습니다. 이번 포스팅에서는 이게 어떻게 불가능하지 않은 일인지, LOD 시뮬레이션과 공간 분할의 개념을 이용해서 직접 구현해보며 확인해보겠습니다. 1. 왜 유닛을 서로 비교하면 안될까? 가장 심플한 방법은 매 틱마다 모든 유닛이 다른 모든 유닛과의 관계(거리, 충돌, 영향 범위)를 체크하는 … 더 읽기