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

- 레벨 정리: 기존 레벨에 남아있던 스태틱 메시 플랫폼을 삭제하고, 방금 생성한 블루프린트 클래스인 **BP_Platform**을 레벨에 배치합니다.
- **BP_Platform**을 더블 클릭하여 엽니다.
- Capsule Collision (캡슐 충돌) 구성요소를 선택하고, 디테일 패널 하단에서 On Component Begin Overlap 이벤트를 추가합니다.
- 플레이어 태그 확인: 이전과 마찬가지로, 충돌을 일으킨 액터가 Player 태그를 가지고 있는지 확인해야 합니다.
- Other Actor 핀에서 Actor Has Tag 노드를 연결하고, 태그에 **Player**를 입력합니다.
- 이 결과를 Branch 노드에 연결합니다.
- 레벨 열기: 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 시퀀스에 적용되어야 합니다.
- Player Controller 블루프린트를 엽니다.
- Get Player Pawn 노드의 출력 핀을 바로 사용하는 대신, Is Valid (매크로) 노드를 검색하여 연결합니다.
- 유효할 때 (Is Valid): Is Valid의 Is Valid 출력 핀에서 기존의 초기화 로직 (Set Ball Ref, Get Ball Component 등)을 연결하여 진행합니다.
- 유효하지 않을 때 (Is Not Valid):
- Is Not Valid 출력 핀에서 Delay 노드를 호출하고, 짧은 시간(예: 0.2초)을 설정합니다.
- Delay가 완료되면, 실행 핀을 다시 Is Valid 노드의 실행 핀으로 연결하여 스스로 반복하게 만듭니다.


이 패턴은 BP_Ball이 스폰될 때까지 0.2초마다 유효성 검사를 반복하여 오류 없이 안전하게 참조를 설정할 수 있게 합니다. 이 로직을 Player Controller의 BeginPlay에 있는 모든 참조 설정 부분에 적용합니다.
📸 3. 승리 화면 카메라 설정
새로운 레벨인 **Map_End**에 진입했을 때, 플레이어의 시점을 공을 따라가는 카메라에서 고정된 승리 화면 뷰로 전환합니다.
A. 카메라 액터 생성 및 배치

- 콘텐츠 브라우저에서 Map_End 레벨을 엽니다.
- 뷰포트를 원하는 최종 승리 화면의 시점으로 이동시킵니다.
- 뷰포트 상단 메뉴에서 Create Camera Here (여기에 카메라 생성) 버튼을 클릭하고 **Camera Actor (카메라 액터)**를 선택합니다.

- 이 카메라 액터의 이름을 확인합니다. (기본적으로 Camera Actor로 명명됩니다.)
- 팁: 실수로 카메라 위치를 옮기는 것을 방지하기 위해, 카메라 액터를 선택하고 디테일 패널에서 마우스 오른쪽 버튼을 클릭하여 **Transform > Lock Actor Movement (액터 움직임 잠금)**를 선택합니다.

B. 레벨 블루프린트에서 시점 전환 코딩
- Map_End 레벨이 열린 상태에서, 상단 툴바의 Blueprint 버튼을 클릭하고 Open Level Blueprint를 선택합니다.
- 이벤트 그래프에 마우스 오른쪽 버튼을 클릭하고 Event BeginPlay 노드를 추가합니다. (이 레벨이 시작될 때 단 한 번 실행됩니다.)
- 시점 전환 노드 호출: 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 키나 마우스 움직임도 더 이상 공을 조작하지 않으므로, 승리 화면이 고정됩니다.
출처 입력
이로써 캐릭터 움직임, 아이템 획득 및 점수 시스템, 그리고 최종 승리 화면 전환까지 모두 구현이 완료되었습니다.
'Unreal Engine' 카테고리의 다른 글
| Unreal Engine 간단한 스크롤 수집 게임 10 (0) | 2025.11.14 |
|---|---|
| Unreal Engine 간단한 스크롤 수집 게임 9 (0) | 2025.11.14 |
| Unreal Engine 간단한 스크롤 수집 게임 7 (0) | 2025.11.13 |
| Unreal Engine 간단한 스크롤 수집 게임 6 (0) | 2025.11.13 |
| Unreal Engine 간단한 스크롤 수집 게임 5 (0) | 2025.11.13 |