본문 바로가기
Unreal Engine

Unreal Engine 변수를 활용한 간단한 경주 게임 만들기

by hfgraphic 2025. 10. 20.
반응형

 

변수를 활용한 간단한 경주 게임 만들기

 

이제까지 배운 모든 것을 이 예제를 통해 사용해 봅시다.

현재 저는 이전에 만들었던 **'Map_Tutorial'**이라는 간단한 맵을 가지고 있습니다. 맵은 비어있는 상태입니다.

 

1. 게임 목표 및 구성 요소

  • 게임 목표: 세 개의 **구체(Sphere)**를 생성하고, 키보드 버튼을 눌러 구체들을 움직여서 **결승선(Goal)**에 가장 먼저 도달하는 구체가 승리하는 간단한 경주 게임을 만드는 것입니다.
  • 레벨 구성 요소:
  1. 세 개의 구체(Sphere): 경주할 액터입니다.
  • 이름을 각각 'Small_Sphere', 'Medium_Sphere', **'Large_Sphere'**로 지정합니다. (프로그래밍 시 구별을 위해 이름을 명확히 합니다.)
  • **Scale (크기)**을 조정합니다. (모든 축을 동시에 변경하려면 디테일 패널의 자물쇠를 클릭합니다.)
  • **Mobility (이동성)**를 **'Movable (이동 가능)'**로 설정합니다. (게임 중 위치를 변경하기 위함입니다.)
  • **Generate Overlap Events (오버랩 이벤트 생성)**를 체크해야 합니다. (트리거 박스와 상호작용하기 위함입니다.)
  1. 트리거 박스(Trigger Box): 결승선을 나타냅니다.
  • Create (생성) → **Box Trigger (박스 트리거)**를 추가하고, **Scale (R 키)**을 조정하여 목표 지점을 덮도록 합니다.

 

2. 구체 이동 로직 구현 (E 키 예시)

E, R, T 세 개의 키로 각각의 구체를 이동시키고자 합니다. Level Blueprint를 엽니다.

  1. 이벤트 키 생성: E Key, R Key, T Key 이벤트를 각각 만듭니다. (키가 눌러졌을 때 발생할 이벤트입니다.)
  2. 액터 참조: E Key 이벤트에 연결할 'Small_Sphere' 참조를 생성합니다.
  1. 위치 설정 함수 (Set Actor Location): E 키를 누를 때마다 구체의 위치를 갱신해야 합니다.
  • 정적인 값으로 위치를 설정하면 한 번만 이동하고 멈추므로, 현재 위치를 가져와서 추가적인 값을 더해야 합니다.
  1. 현재 위치 가져오기 (Get Actor Location): 'Small_Sphere' 참조 핀을 당겨 **'Get Actor Location'**을 가져옵니다.
  2. 벡터 분해 및 수정 (Break Vector): 위치 값은 Vector (X, Y, Z)이므로, Vector 핀을 당겨 'Break Vector (벡터 분해)' 노드를 만듭니다. 우리는 X축으로만 이동할 것입니다.
  3. X축 값 수정: X축 핀을 당겨 '- (빼기)' 연산자를 사용하여 20을 뺍니다. (경주 방향이 X축 음의 방향이라고 가정합니다.)
  4. 벡터 재구성 (Make Vector): 수정된 X 핀과 원래의 Y, Z 핀을 연결하여 'Make Vector (벡터 생성)' 노드를 만듭니다.
  5. 새 위치 설정 (Set Actor Location): 이 새로운 벡터를 **'Set Actor Location'**의 'New Location' 핀에 연결합니다.
  • 결과: E 키를 누를 때마다 구체의 현재 위치를 가져와 X축으로 20만큼 이동시키고 새 위치를 설정합니다.

3. 커스텀 함수로 코드 정리 (MoveSphere)

E, R, T 키 이벤트마다 이 긴 코드를 복사/붙여넣기 하는 것은 비효율적입니다. 이 코드를 함수로 정리합니다.

  1. 함수 생성: 위치 이동 로직 전체를 선택하고 **'Collapse to Function'**을 클릭하여 'MoveSphere' 함수를 만듭니다.
  2. 입력 변수 추가: 이 함수는 어느 구체를 움직여야 할지 알아야 합니다.
  • 함수 내부로 들어가 시작 노드를 클릭하고 Actor 타입의 'SphereActor' 입력 변수를 추가합니다.
  • 기존의 'Get Actor Location' 및 **'Set Actor Location'**의 타겟 핀을 이 새로운 'SphereActor' 입력 핀에 연결합니다.
  • (정리: 함수 내부에서 Sphere Actor 입력 핀만 남기고, 모든 타겟 노드를 거기에 연결합니다.)
  1. 호출: E Key 이벤트의 실행 핀을 'MoveSphere' 함수에 연결하고, Small_Sphere 참조를 함수의 'SphereActor'입력 핀에 연결합니다.
  2. 다른 키 연결: R KeyT Key 이벤트도 'MoveSphere' 함수를 호출하고, 각각 Medium_SphereLarge_Sphere 참조를 입력 핀에 연결합니다.

4. 진행 상황 표시 (Add Steps)

 
플레이어가 몇 걸음 이동했는지 화면에 표시합니다.
  1. 변수 생성: **'StepsTaken' (걸음 수)**라는 Integer (정수) 변수를 만듭니다.
  2. 커스텀 이벤트: **'AddSteps'**라는 커스텀 이벤트를 만듭니다.
  3. 로직: 'StepsTaken' 변수 노드에서 **'++' (Increment)**를 사용하여 1을 더하고 Set합니다.
  1. 출력: Print String에 연결하여 'StepsTaken' 변수 값을 출력합니다.
  1. 호출: E, R, T Key 이벤트가 'MoveSphere' 함수를 호출한 다음'AddSteps' 커스텀 이벤트를 호출하도록 연결합니다.

5. 승리 조건 및 입력 비활성화

구체가 트리거 박스에 닿으면 승리 메시지를 출력하고 게임 입력을 비활성화합니다.

  1. 오버랩 이벤트 추가: Trigger Box를 선택한 상태에서 오버랩 이벤트 (On Actor Begin Overlap)를 추가합니다.
  1. 승리 메시지 변수: **'WinMessage'**라는 Text (텍스트) 변수를 만들고, 동적 텍스트를 위해 중괄호를 사용하여 **"{SphereName} has won!"**이라고 설정합니다.
  1. 메시지 포맷:
  • 'WinMessage' 변수를 가져와 'Format Text' 노드에 연결합니다.
  • 'Format Text' 노드의 SphereName 입력 핀을 On Actor Begin Overlap 이벤트의 Other Actor (다른 액터) 핀에 연결합니다.
  • Other Actor 핀에서 **'Get Display Name'**을 가져와 **'Format Text'**의 입력 핀에 연결합니다. (이렇게 하면 충돌한 구체의 이름을 가져옵니다.)
  • Format Text의 결과를 Print String에 연결합니다.
  1. 입력 비활성화: 승리 후 더 이상 움직일 수 없도록, Print String 노드 다음에 'Disable Input (입력 비활성화)'노드를 연결합니다. **'Player Controller (플레이어 컨트롤러)'**를 얻어 이 노드의 입력 핀에 연결합니다.

 

6. 실행 및 최종 정리

  1. Compile하고 Save All을 클릭합니다.
  2. Play를 클릭하고 E, R, T를 눌러 경주합니다. 가장 먼저 트리거 박스에 닿는 구체의 이름이 포함된 승리 메시지가 출력되고 입력이 비활성화됩니다.

💡 코드 정리 및 주석: 나중에 코드를 쉽게 이해할 수 있도록 C 키를 눌러 주석을 달아두는 것을 잊지 마세요. (예: 'E, R, T events to move spheres', 'Checks if backpack is full' 등)

 

반응형