본문 바로가기
Unreal Engine

Unreal Engine 간단한 스크롤 수집 게임 8

by hfgraphic 2025. 11. 13.
반응형

 

1. 승리 로직 구현: 레벨 전환

 

플레이어가 플랫폼 위의 트리거에 닿았을 때 게임을 종료하고 다른 레벨로 전환하는 로직을 설정합니다.

 

BP_Platform에 레벨 전환 로직 추가

  1. 레벨 정리: 기존 레벨에 남아있던 스태틱 메시 플랫폼을 삭제하고, 방금 생성한 블루프린트 클래스인 **BP_Platform**을 레벨에 배치합니다.
  2. **BP_Platform**을 더블 클릭하여 엽니다.
  3. Capsule Collision (캡슐 충돌) 구성요소를 선택하고, 디테일 패널 하단에서 On Component Begin Overlap 이벤트를 추가합니다.
  4. 플레이어 태그 확인: 이전과 마찬가지로, 충돌을 일으킨 액터가 Player 태그를 가지고 있는지 확인해야 합니다.
  • Other Actor 핀에서 Actor Has Tag 노드를 연결하고, 태그에 **Player**를 입력합니다.
  • 이 결과를 Branch 노드에 연결합니다.
  1. 레벨 열기: Branch의 True 실행 핀에서 Open Level (by Name) 노드를 호출합니다.
  • Level Name 입력란에 정확하게 **Map_End**를 입력합니다.

이 로직이 작동하면, 플레이어가 플랫폼에 닿는 순간 Map_End 레벨로 전환됩니다.


 

🛑 2. 흔한 오류 수정: 'Access None' 해결

 

레벨 전환 후 게임을 다시 실행하거나 ESC를 눌러 종료하면, **Player Controller**에서 "Access None" 오류가 발생할 수 있습니다.

 

오류 발생 원인

Player Controller의 **Event BeginPlay**에서 **Get Player Pawn**을 호출한 후 곧바로 Set Ball Ref와 같은 함수를 호출하려고 시도할 때 발생합니다. BeginPlay가 실행되는 시점은 Player Controller가 생성된 직후이며, Player Pawn (BP_Ball)이 아직 완전히 스폰되지 않았을 수 있습니다. (이는 타이밍 문제, 즉 레이스 컨디션(Race Condition)입니다.)

 

유효성 검사 (Is Valid) 로직 구현

 

오류를 해결하기 위해, 객체를 사용하기 전에 유효성 검사를 통해 객체가 메모리에 로드되었는지 확인하는 로직을 추가합니다. 이 로직은 Player Controller의 Event BeginPlay 시퀀스에 적용되어야 합니다.

  1. Player Controller 블루프린트를 엽니다.
  2. Get Player Pawn 노드의 출력 핀을 바로 사용하는 대신, Is Valid (매크로) 노드를 검색하여 연결합니다.
  3. 유효할 때 (Is Valid): Is Valid의 Is Valid 출력 핀에서 기존의 초기화 로직 (Set Ball Ref, Get Ball Component 등)을 연결하여 진행합니다.
  4. 유효하지 않을 때 (Is Not Valid):
  • Is Not Valid 출력 핀에서 Delay 노드를 호출하고, 짧은 시간(예: 0.2초)을 설정합니다.
  • Delay가 완료되면, 실행 핀을 다시 Is Valid 노드의 실행 핀으로 연결하여 스스로 반복하게 만듭니다.

이 패턴은 BP_Ball이 스폰될 때까지 0.2초마다 유효성 검사를 반복하여 오류 없이 안전하게 참조를 설정할 수 있게 합니다. 이 로직을 Player Controller의 BeginPlay에 있는 모든 참조 설정 부분에 적용합니다.


 

📸 3. 승리 화면 카메라 설정

 

새로운 레벨인 **Map_End**에 진입했을 때, 플레이어의 시점을 공을 따라가는 카메라에서 고정된 승리 화면 뷰로 전환합니다.

 

A. 카메라 액터 생성 및 배치

  1. 콘텐츠 브라우저에서 Map_End 레벨을 엽니다.
  2. 뷰포트를 원하는 최종 승리 화면의 시점으로 이동시킵니다.
  3. 뷰포트 상단 메뉴에서 Create Camera Here (여기에 카메라 생성) 버튼을 클릭하고 **Camera Actor (카메라 액터)**를 선택합니다.
  • 이 카메라 액터의 이름을 확인합니다. (기본적으로 Camera Actor로 명명됩니다.)
  1. 팁: 실수로 카메라 위치를 옮기는 것을 방지하기 위해, 카메라 액터를 선택하고 디테일 패널에서 마우스 오른쪽 버튼을 클릭하여 **Transform > Lock Actor Movement (액터 움직임 잠금)**를 선택합니다.

 

B. 레벨 블루프린트에서 시점 전환 코딩

 

  1. Map_End 레벨이 열린 상태에서, 상단 툴바의 Blueprint 버튼을 클릭하고 Open Level Blueprint를 선택합니다.
  2. 이벤트 그래프에 마우스 오른쪽 버튼을 클릭하고 Event BeginPlay 노드를 추가합니다. (이 레벨이 시작될 때 단 한 번 실행됩니다.)
  3. 시점 전환 노드 호출: Event BeginPlay에서 Set View Target with Blend 노드를 호출합니다.
  • Target: Get Player Controller 노드를 연결합니다. (시점을 전환할 대상은 플레이어 컨트롤러입니다.)
  • New View Target:
  • 레벨에 배치한 Camera Actor를 선택합니다.
  • 레벨 블루프린트로 돌아와 마우스 오른쪽 버튼을 클릭하고 **Reference to [Camera Actor Name]**을 생성합니다.
  • 이 카메라 레퍼런스를 New View Target 핀에 연결합니다.

결과: 이제 게임을 플레이하여 플랫폼에 닿으면 Map_End로 전환되고, Map_End가 시작되자마자 플레이어의 시점이 고정된 Camera Actor 뷰로 부드럽게 전환되어 승리 화면을 보여줍니다. WASD 키나 마우스 움직임도 더 이상 공을 조작하지 않으므로, 승리 화면이 고정됩니다.

출처 입력


이로써 캐릭터 움직임, 아이템 획득 및 점수 시스템, 그리고 최종 승리 화면 전환까지 모두 구현이 완료되었습니다.

 

반응형