언리얼 엔진5 Basic - 캐릭터와 입력 시스템 (Character & Input System)

타입·2024년 3월 29일
0

언리얼 강의

목록 보기
9/47

캐릭터와 입력 시스템

액터와 컴포넌트

  • 액터의 구조
    월드에 속한 콘텐츠의 기본 단위를 액터라고 함
    액터는 트랜스폼을 가지며, 월드로부터 틱과 시간 서비스를 제공받음
    사실 액터는 논리적 개념일 뿐 컴포넌트를 감싸는 포장 박스에 불과함
    실질적인 구현은 컴포넌트가 진행하고 액터는 다수의 컴포넌트를 소유하고 있음
    다수의 컴포넌트를 대표하는 컴포넌트를 루트 컴포넌트(Root Component)라고 함
    액터는 루트 컴포넌트를 가져야 하며, 루트 컴포넌트의 트랜스폼은 액터의 트랜스폼을 의미함
  • C++ 액터에서 컴포넌트의 생성
    • 컴포넌트는 언리얼 오브젝트이므로 UPROPERTY를 설정하고 TObjectPtr로 포인터를 선언
      (언리얼5부터 헤더에 언리얼 오브젝트를 선얼할 때 일반 포인터에서 TObjectPtr로 변경)
    • 컴포넌트의 등록
      CDO에서 생성한 컴포넌트는 자동으로 월드에 등록됨
      런타임에 NewObject로 생성한 컴포넌트는 반드시 등록절차를 거쳐야 함 -> RegisterComponent
      등록된 컴포넌트는 월드의 기능을 사용할 수 있으며, 물리와 렌더링 처리에 합류함
    • 컴포넌트의 확장 설계
      에디터 편집 및 블루프린트로의 승계를 위한 설정
      UPROPERTY에 지정자(Specifier)를 설정할 수 있음
    • 컴포넌트 지정자
      • Visible/Edit: 크게 객체타입과 값타입으로 사용
      • Anywhere/DefaultsOnly/InstanceOnly: 에디터에서 편집 가능 영역
      • BlueprintReadOnly/BlueprintReadWrite: 블루프린트로 확장시 읽기 혹은 읽기쓰기 권한을 부여
      • Category: 에디터 편집 영역(Detail)에서의 카테고리 지정

캐릭터의 제작

  • 폰의 기능과 설계
    폰은 액터를 상속받은 특별한 액터이며, 플레이어가 빙의해 입출력을 처리하도록 설계되어 있음
    • 폰은 길찾기를 사용할 수 있으며, 일반적으로 세가지 주요 컴포넌트로 구성됨
      • 충돌 컴포넌트: 기믹과 상호작용을 담당 (루트 컴포넌트)
      • 메시 컴포넌트: 시각적인 비주얼을 담당
      • 무브먼트 컴포넌트: 움직임을 담당

액터 컴포넌트: 컴포넌트 중에서 Transform이 없이 기능만 제공하는 컴포넌트
씬 컴포넌트: Transform이 있는 컴포넌트

  • 캐릭터의 기본 구조
    캐릭터는 인간형 폰을 구성하도록 언리얼이 제공하는 전문 폰 클래스
    • 캐릭터는 세가지 주요 컴포넌트로 구성됨
      • 캡슐 컴포넌트: 기믹과 상호작용을 담당 (루트 컴포넌트)
      • 스켈레탈 메시 컴포넌트: 애니메이션 캐릭터를 표현
      • 캐릭터 무브먼트 컴포넌트: 캐릭터의 움직임을 담당

입력 시스템 개요

  • 입력 시스템의 동작 방식
    플레이어의 입력은 컨트롤러를 통해 폰으로 전달됨
    입력을 컨트롤러가 처리할 수도, 폰이 처리할 수도 있는데, 일반적으로는 폰이 처리하도록 설정
    • GTA 같은 다양한 사물에 빙의하는 게임의 경우 폰이 유리
      사물마다 다른 처리를 해야하는데 이를 모두 컨트롤러에 구현하면 코드가 방대해지고 복잡해져 구조상 좋지 않음

향상된 입력 시스템 (Enhanced Input System)

기존 입력시스템을 대체하고 언리얼 5.1부터 새롭게 도입
사용자의 입력 설정 변경에 유연하게 대처할 수 있도록 구조를 재수립
사용자 입력 처리를 네 단계로 세분화하고 각 설정을 독립적인 애셋으로 대체

  • 향상된 입력시스템 동작 구성
    사용자의 입력데이터를 최종 함수에 매핑하는 과정을 체계적으로 구성
    • 플랫폼에 따른 다양한 입력 장치의 설정
      예) 게임패드용 입력 매핑 컨텍스트, 키보드용 입력 매핑 컨텍스트
    • 입력 값의 변경
      예) AD/WS 입력값을 Y축과 X축으로 변경, 값 반전의 처리
    • 이벤트 발생 조건의 상세 설정
      예) 일반 버튼인가? 축 이동인가? 일정 이상 눌러야 하는가?


실습코드

https://github.com/dnjfs/ArenaBattle/commit/dcc1ded313d3bf82a2fc6657c0306cf71320e640

  • 컴포넌트 생성과 붙이기
    CreateDefaultSubobject<>() 함수로 컴포넌트를 생성하고
    SetupAttachment() 함수로 다른 컴포넌트에 붙일 수 있음
profile
주니어 언리얼 프로그래머

0개의 댓글