Study/Project

VV 5. 움직임 구현 (Infinity Run), 점프, 슬라이드

에린_1 2024. 10. 30. 17:26
728x90

VV

첫번째 게임은 일단 템플런 같은 Infinity Runner형태의 게임을 만들 생각이다.
로그인이 성공하면 게임에 접속해야 하기에 레벨 전환부터 만들어주었다.

void UNetworkManager::ProcessResponse(const TArray<uint8>& ReceiveData)
{
    if (ReceiveData.Num() < sizeof(hbServerEngine::PacketHeader))
    {
        return;
    }

    hbServerEngine::PacketHeader* Header = (hbServerEngine::PacketHeader*)ReceiveData.GetData();
    switch (Header->MsgID)
    {
    case EMessageID::LOGIN_RESPONSE_MSG_ID:
    {
        if (Header->Attribute == 0)
        {
            UE_LOG(LogTemp, Log, TEXT("Login successful!"));
            //TODO 로그인 성공
            UGameplayStatics::OpenLevel(this, FName("Map_Runner"));
        }
        else if (Header->Attribute == 1)
        {
            UE_LOG(LogTemp, Warning, TEXT("Login failed. Incorrect ID or Password."));
            //TODO 로그인 실패 로직 처리
        }
        StopReceiving();
        break;
    }

    default:
        UE_LOG(LogTemp, Warning, TEXT("Unhandled MsgID: %d"), Header->MsgID);
        break;
    }
}
  • 로그인 성공시 Map_Runner로 이동하도록 구현했다.

Infinity Runner의 경우 유튜브를 참조했다.

  • 게임이 시작될 때 플레이어의 입력 시스템에 특정 매핑(Context)을 추가하는 과정을 보여준다.
  • 여기서는 미리 설정해둔 매핑(IMC_Runner)를 추가해주었다.

IMC_Runner

  • Infinity Run을 만들어주었다. EventTick으로 매 Tick마다 연산되도록 했다.
  • Add Movement Input을 통해 액터에게 지속적인 이동 입력을 추가해줬다. World Direction에 Get Forward Vector의 출력이 연결되어 있으므로 캐릭터는 앞으로 이동하고 Scale Value가 1.0으로 설정되어 있기 때문에, 캐릭터가 일정한 속도로 계속 앞으로 움직이게 된다.

  • 점프와 슬라이드를 구현한 구조
  • Add Impulse의 경우 캐릭터의 Character Movement Component에 즉시적인 힘을 추가한다. 이 경우 슬라이드 액션이 실행될 때, 캐릭터에 일정한 방향과 크기의 힘을 가하게 된다. Velocity Change가 체크되지 않았기 때문에, 현재 속도에 추가적인 힘으로 작용한다.
  • Do Once는 슬라이드 동작이 한 번만 실행되도록 보장한다. 이를 통해 슬라이드 액션이 계속 반복되지 않고 한 번만 트리거되도록 한다.
  • Is Falling은 캐릭터가 공중에 있는지 여부를 반환한다. 여기서는 캐릭터가 공중에 있지 않을 때 슬라이드가 가능하도록 하고 있다.
  • Vector Length 캐릭터의 속도 벡터의 크기를 계산하여, 현재 속도가 일정 이상인지 확인한다.
  • Disable Input 플레이어의 입력을 일시적으로 비활성화 한다. 슬라이드가 수행되는 동안 플레이어가 다른 입력을 할 수 없게 하기 위함이다.
728x90