※ 해당 기록은 Unreal 5.5.4 버전을 기준으로 작성되었습니다.
< SuperHot >은 VR 버전도 따로 존재한다. 원본은 플레이어가 WASD로 움직이고 마우스로 화면이 돌아가면 시간이 흐른다. VR 버전은 VR 장비를 착용하고 플레이하면서 화면을 도는 것을 제어하기 힘드므로 제자리에서 액션을 하는, 원본에 비해 좀 더 퍼즐적인 느낌이 강해진 작품으로 알고 있다. 그러나 플레이어가 좀 더 다양한 기능을 갖는 것이 내 실력을 높이는 데 도움이 되므로 이동 기능을 구현한다.
VR 기기를 실제로 보는 것도, VR 컨텐츠를 플레이하는 것도 이번이 처음이다. 짧은 기간의 프로젝트지만 기대가 크다.
우선 아직 VR 플러그인을 추가하진 않아서 우선 WASD와 마우스를 기본으로 매핑해두었다. Enhanced Input을 사용해서 엔진에서 매핑하는 건 항상 금방하는데 뭐랄까 C++로 넘어와서 처리할 때가 되면 그렇게 헷갈리지 않을 수가 없다.
void ASHPlayer::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
auto pc = Cast<APlayerController>(GetController());
if (pc)
{
auto subSys = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(pc->GetLocalPlayer());
if (subSys)
{
subSys->AddMappingContext(IMC_Player, 1);
}
}
auto playerInput = Cast<UEnhancedInputComponent>(PlayerInputComponent);
if (playerInput)
{
playerInput->BindAction(IA_PlayerMove, ETriggerEvent::Triggered, this, &ASHPlayer::Move);
playerInput->BindAction(IA_PlayerTurn, ETriggerEvent::Triggered, this, &ASHPlayer::Turn);
playerInput->BindAction(IA_PlayerMove, ETriggerEvent::Started, this, &ASHPlayer::ShiftDilation);
playerInput->BindAction(IA_PlayerMove, ETriggerEvent::Completed, this, &ASHPlayer::ShiftDilation);
}
}
프로젝트를 새로 펼 때마다 한 번씩은 무조건 사용하게 되는 친구라지만, 맨 처음에 한 번 만들고는 아래의 InputAction과 함수를 연결하는 부분 추가하는 거 말고는 잘 건드리지 않는 부분이라 그런가 잘 외워지진 않는 거 같다.
이건 아마 정확한 정보는 아닐지도 모르지만, AddMapingContext(IMC_Player, 1)에서 1을 0으로 했었을 때 입력이 씹히는 현상이 있었다. 아무래도 0보단 우선순위가 높은 1이 낫다는 편.
당일 수업에 나갔던 파트라 만드는 것 자체는 금방 구현했었다. 그러나 왜인지 몰라도 코드 문제없고, 인풋 매핑 컨텍스트에 제대로 넣어놨는데 W 누르면 왼쪽 앞으로 가고, S 누르면 앞으로 가고 이런 식으로 입력이 이상하게 들어갔다. 도저히 뭐가 문젠지 감도 못잡았던거 그냥 매핑 컨텍스트 안에서 할당된거 다 지우고 다시 넣어주니까 제대로 돌아갔다. 정말 이해할 수 없다.
앞으로 구현해야할 것들이 잔뜩이다. 24일인 프로토 발표까지 계획 중인 사항은 잡기와 근접 공격, 총탄의 움직임까지다. 단순히 키보드 마우스로 구현하는 거라면, 처음하는 1인칭이래도 일단 에셋 넣고 애니메이션 넣고 하면 그만이지만, VR은 뭔가 느낌이 다르다. 배우는 내용이 매번 새롭다.