paiams

Go Back

Catch Cat


퍼즐 게임에서는 정해진 답을 찾지 못했을 때 진행이 막히기 쉽다. 나는 하나의 풀이를 강요하는 대신 집 안을 돌아다니며 여러 행동을 시도할 수 있는 잠입 게임을 구상했다. 길고양이가 집주인의 눈을 피해 집에 들어간다는 설정으로, 들키지 않고 수집물을 모아 출구를 여는 흐름을 만들었다.

Catch Cat은 2023년 10월부터 12월까지 소프트웨어융합개론 수업에서 혼자 개발한 Unity 게임 프로토타입이다. 나는 게임 규칙과 맵을 구성하고 고양이 조작, 집주인 AI, 수집과 게임 종료까지 전체 플레이 흐름을 구현했다. 캐릭터와 실내외 배경에는 에셋을 사용했다.

고양이의 이동과 점프

고양이는 Cinemachine FreeLook 카메라가 바라보는 방향을 기준으로 움직인다. 걷기와 달리기를 나누고, 일정 시간 달리면 구르기로 이어지도록 애니메이션과 이동 속도를 연결했다.

점프는 스페이스바를 누른 시간에 따라 높이가 달라진다. 입력을 누르는 동안에는 고양이를 제자리에 멈추고 점프를 준비하는 애니메이션을 재생한다. 키를 놓으면 누른 시간을 최소·최대 힘 사이의 값으로 바꿔 Rigidbody에 적용했다. 바닥을 향한 Raycast로 착지 여부를 판단해 공중 동작과 다음 점프도 구분했다.

시야로 추적하는 집주인

집주인은 Walk, Chase, Idle 상태를 오간다. 평소에는 NavMesh 위의 목적지를 향해 이동하고, 고양이를 발견하면 마지막으로 본 위치까지 추격한다. 시야에서 놓친 뒤 그 위치에 도착하면 주변을 살핀 다음 다시 이동한다.

고양이가 보이는지는 거리만으로 정하지 않았다. 먼저 일정 반경 안의 대상을 찾고, 집주인이 바라보는 방향과 고양이 방향의 내적으로 시야각 안에 있는지 계산했다. 이어 둘 사이에 Raycast를 보내 벽이나 가구에 가려졌는지 확인했다. 디버그 화면에서는 같은 계산으로 시야 범위와 장애물에 막힌 부분을 그려 판정 결과를 장면에서 바로 확인할 수 있게 했다.

NavMeshAgent가 목적지 경로를 계산하는 동안 remainingDistance가 0으로 나타나 이동을 마친 것으로 잘못 판단하는 문제도 있었다. 목적지와 현재 위치의 거리, 정지 거리, 남은 경로와 속도를 함께 확인하도록 도착 조건을 바꿔 순찰이 중간에 끊기지 않게 했다.

수집과 탈출

처음에는 고양이가 간식을 모아 집고양이를 만나는 결말을 계획했지만, 적절한 모델을 구하지 못해 선물 상자 다섯 개를 모으는 규칙으로 범위를 줄였다. 상자를 모두 모으면 문이 열리고 출구에 도착하면 게임이 끝난다. 집주인에게 붙잡히면 실패 화면을 표시하며, 두 결과 모두 같은 장면에서 다시 시작할 수 있다.

수집물을 모으며 집주인의 시야를 피해 출구로 이동하는 최종 프로토타입.

남은 한계

물건을 떨어뜨려 소리를 내고 집주인의 주의를 돌리는 상호작용은 초기 계획에만 남았다. 완성한 버전의 선택지는 집주인의 시야를 피하며 수집물을 찾는 데 그쳐, 처음 목표로 삼았던 자유로운 퍼즐 플레이까지 이어지지는 못했다.

다시 만든다면 먼저 소리가 발생하는 조건과 집주인이 소리를 조사한 뒤 순찰로 돌아가는 상태를 추가하겠다. 이후 같은 공간에서 시야를 피해 이동하는 방법과 소리로 주의를 돌리는 방법이 실제로 다른 선택을 만드는지 플레이 테스트로 확인할 것이다.

링크