Study/TIL(Today I Learned)

24.10.30 VV, UE5

에린_1 2024. 10. 30. 17:22
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 플레이어의 입력을 일시적으로 비활성화 한다. 슬라이드가 수행되는 동안 플레이어가 다른 입력을 할 수 없게 하기 위함이다.

UE5

Event BeginPlay

  • 게임에서 특정 액터가 시작할 때 실행되는 이벤트이다.
  • 액터가 월드에 스폰되고 초기화된 후에 실행되며, 게임이 실제로 시작되는 시점에 호출된다.
  • 이 이벤트는 액터가 준비된 상태에서 첫 동작을 할 수 있게 하는 것이며, 게임 플레이의 시작 시점에서 필요한 초기 설정을 수행하는 데 자주 사용된다.

Cast to PlayerController

  • 특정 오브젝트나 액터를 PlayerController 타입으로 형변환(casting)하는 것이다. 언리얼 엔진에서는 플레이어가 게임과 상호작용 할 수 있게 해주는 컨트롤러 객체가 있는데, 이 객체는 플레이어 입력을 처리하고 월드의 캐릭터를 제어한다.
  • 사용 이유
    • 현재 다루고 있는 객체가 PlayerController인지 확인하고 싶을 때.
    • PlayerController에만 존재하는 특정 기능이나 변수에 접근하고 싶을 때.

Add Mapping Context

  • 특정 입력 매핑(Context)을 현재 플레이어의 입력 시스템에 추가하는 기능하다.
    • Input Mapping Context는 일종의 설정 파일로, 게임에서 사용되는 입력과 해당 입력이 해당 입력이 어떤 기능을 수행할지 매핑해 놓은 것이다.
  • 플레이어의 입력 설정에 특정 맵핑을 동적으로 추가할 수 있다. 이는 게임 플레이 도중 플레이어의 입력 방식을 변경하거나 새로운 입력을 추가하고자 할 때 유용하다.
    • 특정 상황에 맞게 입력 방식을 바꾸고 싶을 때.
    • 미니게임이 시작되거나 끝날 때 입력 매핑을 바꾸고 싶을 때.

Event Tick

  • 언리얼 엔진에서 매 프레임마다 호출되는 이벤트이다. 이 이벤트는 액터가 게임에서 시족적으로 무언가를 업데이트 해야 할 때 사용된다.

주요 특징

  1. 매 프레임 호출
    • Event Tick은 게임이 실행되는 동안 매 프레임마다 호출되며, 프레임 속도에 따라 호출 횟수가 결정된다.
  2. 실시간 업데이트
    • 이 기능을 사용하면 매 순간 필요한 연산이나 업데이트를 수행할 수 있다.
  3. Delta Time 사용
    • Event Tick은 Delta Time이라는 인자를 포함하는데, 이 값은 이전 프레임과 현재 프레임 사이의 시간 차이를 의미한다. 이 값을 이용하면 프레임 속도와 무관하게 일정한 속도로 무언가를 처리할 수 있다.

고려사항

  • 성능
    • Event Tick은 매 프레임마다 호출되므로 무거운 연산을 포함하면 성능 문제가 발생할 수 있다. 특히 많은 액터에서 Event Tick을 사용하면 프레임 속도가 저하될 수 있다. 따라서, 반드시 필요한 경우에만 사용하고, 가급적 최적화된 코드를 작성하는 것이 중요하다.
  • 대안 사용
    • 지속적인 업데이트가 필요한 작업이라도 반드시 Event Tick을 사용할 필요는 없다. 예를 들어, 일정 주기로 업데이트가 필요한 경우에는 Timer를 설정하여 틑ㄱ정 간격으로 함수를 호출하는 것이 더 효율적일 수 있다.

Enhanced Input

  • 언리얼 엔진 5에서 새롭게 도입된 입력 처리 시스템으로, 기존의 입력 방식에 비해 더 유연하고 강력한 기능을 제공한다.
  • 게임 개발자들이 다양한 입력 장치와 상황에 따라 입력을 쉽게 관리할 수 있게 해주며, 특히 멀티 플랫폼 환경과 복잡한 입력 요구 사항을 효과적으로 처리할 수 있도록 돕는다.

주요 개념

  1. Input Action(입력 액션)
    • 게임 내에서 플레이어가 취할 수 있는 행동을 정의하는 객체이다.
    • 하나 이상의 입력에 매핑될 수 있다.
    • 주요 특징은 단순히 키 하나에 매핑되는 것이 아니라, 입력의 유형과 강도를 정의할 수 있다.
  2. Input Mapping Context(입력 매핑 컨텐스트)
    • 여러 Input Action을 특정 입력 장치와 연결하는 역할을 한다. 예를 들어, 키보드, 게임패드, 마우스 등 여러 입력 장치에서 동일한 액션을 어떻게 처리할지를 정의한다.
      • 각 Mapping Context는 여러 Input Action에 대해 키를 매핑할 수 있다.
      • Input Mapping Context는 우선 순위가 있으며, 이를 통해 특정 상황에 따라 입력 매핑을 활성화하거나 비활성화할 수 있습니다.
  3. Modifiers와 Triggers
    • Modifiers(수정자)
      • 입력 값을 변형시키는 역할을 한다. 예를 들어, Invert 수정자는 입력 값을 반전시켜 줄 수 있고, Scale 수정자는 입력 강도를 조절할 수 있다.
    • Trigger(트리거)
      • 입력이 유효해지기 위한 조건을 설정한다. 예를 들어, 키가 일정 시간 이상 눌려있어야 유효하게 하거나, 특정 입력 조건이 충족될 때만 액션을 실행하게 할 수 있다. 이로 인해 더 복잡한 입력 조건을 구현할 수 있다.
  4. Input Subsysyems(입력 서브 시스템)
    • 이 서브 시스템은 로컬 플레이어나 특정 액터와 관련된 입력을 관리하는 데 사용된다.
    • Local Player Subsystem
      • 주로 로컬 플레이어의 입력을 처리하며, 플레이어별로 고유한 입력 매핑을 설정하거나 변경할 수 있다.
    • Enhanced Input Component
      • 액터에 부착하여 해당 액터가 특정 입력을 처리하게 할 수 있다.

장점

  1. 유연한 입력관리
    • 다양한 입력 장치에 대한 통합된 처리가 가능하며, 상황에 따라 동적으로 입력 매핑을 변경할 수 있다.
  2. 플랫폼 독립성
    • 키보드, 마우스, 게임패드 등 여러 플랫폼에 대한 입력을 손쉽게 설정할 수 있다. 이를 통해 멀티플랫폼 게임 개발에 유리하다.
  3. 상태 기반 입력 처리
    • 입력의 상태에 따라 다양한 동작을 설정할 수 있어 더욱 복잡한 입력 처리가 가능하다.
728x90

'Study > TIL(Today I Learned)' 카테고리의 다른 글

24.11.07 CS, VV  (2) 2024.11.08
24.11.04 VV. 장애물, UI 구현, 점수 구현  (0) 2024.11.04
24.10.29 VV, UE5, DB  (0) 2024.10.29
24.10.28 VV  (0) 2024.10.29
24.10.23 VV  (0) 2024.10.23