UE - 빙의 다뤄보기
BP-Possess
빙의 시스템 구현하기기
이번에 구현할 기능은 두 개의 캐릭터를 생성하고, F 키를 눌러 조종할 캐릭터를 변경하는 시스템이다.
싱글톤
두 캐릭터를 관리하기 위해 캐릭터 매니저를 생성했다. 싱글톤처럼 사용하려고 다양한 방법을 조사한 끝에 GameInstance에서 변수를 생성하는 방식을 선택했다다.
GameInstance란?
- GameInstance는 게임 전체에서 공유할 수 있는 데이터를 관리하는 객체로, 게임이 실행되는 동안 유지됩니다. 이를 활용하면 월드에 배치할 필요 없이 데이터를 중앙에서 관리할 수 있다.
캐릭터 매니저 구현
객체 생성 :
GameInstance에 CharacterManager 변수를 생성했다.
CharacterManager는 월드에 배치할 필요가 없으므로 UObject로 구현했다다.
Unreal Engine 5.5에서는 Construct Object from Class 노드를 사용하여 UObject를 초기화할 수 있다.
기능 추가 :
CharacterManager는 다음 두 가지 주요 함수를 가지고 있다.
Add Character : 캐릭터의 BeginPlay에서 호출되며, 생성된 캐릭터의 참조값을 매니저에 전달한한다. 매니저는 이를 배열에 저장하고, 캐릭터에게 자신의 배열 인덱스를 알준다.
Swap Character : 플레이어 컨트롤러의 조종 대상을 변경하는 함수다. 현재 조종 중인 캐릭터에서 IA_ChangePawn 이벤트가 발생하면 이 함수를 호출하여 빙의 대상을 변경한다.
결과
문제점과 해결 방법
빙의 해제 후 캐릭터가 공중에 멈춰있는 문제
원인: CharacterMovementComponent가 가속도, 중력, 점프 등을 처리하다가 빙의가 해제되면서 작동을 멈추는 것으로 보인다.
해결: 빙의가 해제될 때 캡슐 컴포넌트의 Simulate Physics를 true로 설정했다.
빙의 해제된 캐릭터가 넘어지는 문제
문제: 물리 시뮬레이션 활성화 시 캐릭터가 넘어지는 현상이 발생했다.
해결: 캡슐 컴포넌트의 회전 축을 잠그는 설정으로 해결했다.
이것 말고도, 빙의가 해제될 때 캐릭터가 월드에 배치될 때의 방향으로 돌아간다.
이건 아직 원인을 정확히 파악하지 못했으며, CharacterMovementComponent와 빙의 시스템에 대해 추가 조사가 필요하하다.
결과
다음 목표
캐릭터 클래스와 빙의에 대해 좀 더 지식이 필요하다. 캐릭터 전환 시 카메라가 이동하며 시점이 자연스럽게 변환되는 기능을 구현할 예정이다.