이 글은 궁 미로 PalaceMaze 시리즈의 5번째 기록입니다. (총 5개)

오늘 한 일

게임 구조를 정했다. 같은 PC에서 두 명이, 좌우로 나뉜 화면으로, 같은 미로에서 먼저 나가는 쪽이 이긴다. 온라인은 하지 않는다. 함정으로 서로를 방해하는 것은 다음 단계로 미뤘다.

  • 화면을 좌우로 나눴다. 언리얼 설정에서는 이것이 Vertical이다. 이름과 방향이 반대라 헷갈린다.
  • 카메라를 45도 위에서 각 플레이어를 쫓는 고정 각도로 바꿨다. 스프링암 길이 1300, 회전 상속과 카메라 충돌 검사를 껐다. 45도로는 하늘이 화면의 3분의 1을 먹어서 60도까지 내린 판도 찍어 뒀다. 어느 쪽으로 갈지는 아직 정하지 않았다.
  • 템플릿이 쓰던 WASD 이동과 마우스 시점을 캐릭터 블루프린트에서 걷어냈다. 카메라가 고정이라 시점 회전이 필요 없다.
  • 출발 지점을 두 개 만들어 같은 마당에 나란히 놓았다. 미로가 무작위로 뚫려 있어 마당이 다르면 출구까지 경로 길이가 달라진다.
  • 키를 좌우로 갈랐다.
P1    이동 R D F G    점프 왼Ctrl     상호작용 왼Shift
P2    이동 ↑ ← ↓ →    점프 /          상호작용 오른Shift
  • 입력을 한 곳에서 받아 두 사람에게 나눠 주는 액터를 만들었다. 키보드 신호가 1번 플레이어에게만 가기 때문이다.
  • 상자와 문이 발판 위에 누가 올라와 있는지를 플레이어별로 기록하게 바꿨다. 각자 자기 키로만 열 수 있고, 둘이 같이 서 있어도 각자 열린다.

좌우로 나뉜 화면. 두 플레이어가 각자 다른 마당에 있고, 카메라는 60도 위에서 각자를 쫓는다


막힌 부분

오른쪽 Ctrl과 Alt가 게임까지 오지 않는다

키를 거울처럼 대칭으로 잡았는데 오른쪽 Ctrl만 반응이 없었다. 오른쪽 Alt도 같았다. 나머지 열한 개는 전부 들어왔다.

한국어 키보드는 그 자리가 한/영 키와 한자 키다. 윈도우가 한글 입력 전환으로 가로채서 게임까지 오지 않는다.

  • 해결: 2번 플레이어의 점프를 /로 옮겼다. 오른쪽 Shift 바로 옆이라 방향키에서 손을 떼지 않고 누를 수 있다.
  • 남은 한계: 플레이 중에 한/영을 누르면 조작이 멈출 수 있다. 빌드할 때 창에서 입력기를 끄는 설정이 필요하다.

브라우저로는 좌우 Shift를 구분하지 못했다

동시에 몇 개까지 눌리는지 보려고 브라우저에서 눌러 보는 페이지를 먼저 만들었다. 오른쪽 Shift가 잡히지 않았다. 브라우저가 키 이름을 빈 값으로 보내고 좌우 구분 값도 0으로 왔다.

  • 해결: 게임 안에서 재는 화면을 만들었다. 게임은 브라우저를 거치지 않고 윈도우 입력을 직접 읽는다. 오른쪽 Shift는 멀쩡히 들어왔다.

2번 플레이어는 키보드를 보지 못한다

플레이어를 둘로 만들었더니 캐릭터가 하나만 움직였다.

매 프레임 “2번 플레이어 기준으로 지금 위쪽 방향키가 눌려 있는가”를 묻게 하고 그 키를 3초 눌러 확인했다. 수백 번 물었는데 한 번도 눌렸다는 대답이 없었다. 키보드 신호는 1번 플레이어에게만 간다(엔진이 매기는 플레이어 인덱스로는 0번이다).

  • 해결: 입력을 받는 자리를 하나로 정했다. 그 하나가 열두 개 키를 전부 읽어 각자의 캐릭터에 이동을 먹이고, 점프와 상호작용도 나눠 보낸다. 2번 플레이어의 컨트롤러는 화면과 카메라만 맡는다.

발판 위에 누가 있는지를 숫자 하나로 적었다

상자와 문 앞 발판에 “지금 누가 올라와 있나”를 정수 하나로 기록했다. 둘이 같이 문 앞에 서면 나중에 올라온 사람만 남아서, 앞사람 키가 먹지 않았다. 한 명만 빠져나가도 기록이 통째로 지워져 남은 사람도 열 수 없었다.

  • 해결: 1번이 올라와 있는지와 2번이 올라와 있는지를 따로 기록하게 바꿨다. 나갈 때도 나간 사람 것만 지운다.

클래스 이름을 짧게 썼더니 조용히 0이 들어갔다

상자와 문 전체에 신호를 보내려고 특정 종류의 액터를 모두 찾는 노드를 썼는데, 눌러도 아무 일이 없었다. 오류도 컴파일 경고도 없었다.

클래스를 지정하는 칸에 BP_Chest_C처럼 짧은 이름을 넣으면 그 값이 0으로 들어간다. 찾는 대상이 없으니 목록이 비고 반복문이 0번 돈다.

  • 해결: /Game/PalaceMaze/BP_Chest.BP_Chest_C처럼 전체 경로로 적었다. 같은 프로젝트의 다른 블루프린트에 이미 그 형태로 쓰여 있었다.

중단한 작업을 다시 돌려 노드가 두 배가 됐다

키 확인용 노드를 만드는 작업을 중간에 끊었다가 다시 돌렸더니, 키 노드가 전부 두 개씩 생겨 화면에 글자가 두 번씩 떴다. 끊긴 작업이 어디까지 진행됐는지 확인하지 않은 탓이다.

  • 해결: 키 노드와 출력 노드를 전부 지우고 한 벌만 다시 깔았다.

설명이 틀린 것을 로그로 확인했다

R과 G를 누른 채로 오른쪽 Shift가 안 들어오는 일이 있었다. 직전에 한/영 키를 눌러 봤으니 한글 모드 때문이라고 Claude가 설명했다.

단계를 셋으로 나눠 다시 쟀다. 지금 상태에서 한 번, 한/영을 바꾸고 한 번, 되돌리고 한 번. 단계 사이에 Delete를 한 번·두 번·세 번 눌러 로그에 구분선을 남겼다.

세 단계 모두 똑같이 들어왔다. 한/영과 무관했고 그 설명은 틀렸다.

분할 화면에서 HUD가 화면 전체를 덮는다

시간과 생명이 왼쪽 칸에, 조각 수가 오른쪽 칸에 걸쳐 한 장으로 그려진다. 위 사진 윗줄에 그대로 보인다. 레벨매니저가 위젯을 한 장 만들어 뷰포트 전체에 붙이고 있어서다.

  • 원인: 분할 화면에서는 뷰포트에 붙이는 노드가 아니라 플레이어 화면에 붙이는 노드를 써야 한다. 위젯을 만들 때 주인 플레이어를 지정하고 두 장을 만든다.
  • 남은 일: 위젯을 두 장 만들어도 조각 수와 생명이 매니저 한 곳에 있어 같은 숫자가 뜬다. 상태를 먼저 갈라야 한다.

다음에 할 일

  • HUD를 플레이어별로 나눈다. 조각 수와 생명을 먼저 가르고, 플레이어 화면에 붙이는 방식으로 두 장을 만든다.
  • 출구 판정을 「먼저 나간 쪽이 이긴다」로 바꾼다. 지금은 조각을 다 모으면 클리어하는 1인용 판정이다.
  • 입력을 받는 임시 액터를 게임모드나 레벨매니저로 옮기고 이름을 고친다.
  • 카메라 각도를 45도와 60도 중에서 고른다. 거리 1300도 같이 본다.
  • 왜 상대보다 먼저 나가야 하는지 짧게 넣는다. 궁과 마패에서 끌어낸다.
  • 빌드할 때 창에서 입력기를 끈다. 플레이 중 한/영을 누르면 조작이 멈추는데 원인을 모르면 버그로 보인다.
  • 문이 플레이어 쪽으로 열려서 부딪힌다. 두 경첩이 항상 같은 쪽으로 도니 절반은 문짝이 덮치는 쪽이다.
  • 문 30개가 전부 닫힌 채로 시작하는 게 제한시간 180초와 맞는지 실제로 돌아본다.
  • 전각 조립. 담장은 기와까지 끝났으니 남은 건 전각과 석물이다.
  • 마패조각 퍼즐. 조각을 다 모으면 방향을 돌려 끼우는 미니게임을 만든다.
  • SpeedBonus 적용 여부 결정. 캐릭터 블루프린트에서 직접 하거나 변수를 뺀다.
  • 열린 상자 비주얼 교체. 지금은 스케일로 눌러 표시하고 있다.
  • 마당별 오브제 배치. 마당이 전부 똑같이 생겨서 길을 외우기 어렵다.
  • 매니저의 빈 커스텀 이벤트 정리.
  • 상자가 시작 지점과 겹치지 않도록 배치할 때 시작 주변을 비운다.

Series: 궁 미로 PalaceMaze


Suggested Posts