[Unreal] 01.월드생성, 블루프린트 기초(이동, 회전, 입력, 소환)

본 문서는 어소트락 언리얼엔진 게임프로그래머 양성과정의 강의를 토대로 필기한 내용입니다

프로젝트 - 언리얼 엔진 V5.3.2

프로젝트 생성

  • 프로젝트 디폴트
    • 기본설정 : 블루프린트, C++
    • 타깃 플랫폼 : Desktop(Console), mobile(Tablet)
      • 타깃 플랫폼 설정에 따라 렌더링 기능이 달라짐
    • 퀄리티 프리셋 : Maximum, Scalable
    • 시작용 콘텐츠
    • 레이 트레이싱 : 물리 기반 렌더링보다 뛰어난 그래픽 렌더링 기법
  • 아웃라이너 : 레벨의 모든 액터를 이름 순서대로 나열하고 트리 뷰로 정리
  • 디테일 : 액터의 세부 사항 표기

프로젝트 필수 파일

  • Config, Content, Source, Project

액터

월드에 배치되는 모든 물체

  • 컴포넌트(부품)를 추가할 수 있음
  • 어떤 컴포넌트를 조합하느냐에 따라 다른 액터를 만들어낼 수 있다

언리얼 클래스 구조

USceneComponent

  • Transform을 가짐
  • 객체들간의 계층구조 형성
  • 월드 상에 표현해야 하는 모든 물체는 USceneComponent를 상속받고 있다

스크립트

  • ‘A’로 시작 : Actor Class
    • 대부분이 구조체
    • 월드에 배치할 수 있는 기능을 가질 수 있고, 컴포넌트의 기능을 가지고 있음
    • Transform이 없다
    • 계층구조 형성이 안됨
    • 기능 구현만을 위해 사용 (이동 component 등)
    • RootComponent로 USceneComponent의 객체를 가리키는 포인터를 가지고 있다
  • ‘U’로 시작 : Actor가 아닌 Unreal Object
  • ‘I’로 시작 : Interface, 다중 상속 가능

블루프린트

C++의 함수처럼 미리 만들어져 있는 노드를 순서대로 실행할 수 있게 선으로 연결하는 방법

  • 비주얼 스크립팅의 한 종류
  • 프로토타입을 빠르게 만들어 낼 때 사용
  • 종류
    • 구조체 : 함수없이 멤버변수들만 존재하는 기본 구조체
    • 블루프린트 매크로 라이브러리 : 함수 형태의 매크로를 만들어 줄 때 사용
    • 블루프린트 인터페이스 : 인터페이스 클래스는 다중 상속이 가능(Unity와 동일), 어떤 클래스에 추가적인 기능을 구현하기 위해 사용
    • 블루프린트 클래스 : 기본 클래스 형식의 블루프린트
    • 블루프린트 함수 라이브러리 : 전역함수를 만들어 놓고 호출해서 사용하는 형식
    • 열거형 : Enum 형식
  • UE에서 제공하는 클래스 중 하나를 무조건 상속 받아야 한다

DefaultSceneRoot

기본 씬 루트 컴포넌트, 다른 씬 컴포넌트로 덮어 쓰기 할 수 있음

ContructionScript

생성자의 역할을 해주는 스크립트 (정확히 말하자면 생성자는 아니다)
OnContruction 함수를 호출해주는 함수 (초기화용 함수)

  • 생성자와 Begin Play가 해줘야하는 초기화를 분리해서 코드 작성을하여야 함
  • ConstructionScript는 객체 생성 최초에 한번만 실행
    • Unity의 Awake 함수와 동일한 역할인 듯
  • 객체가 움직이거나 갱신될 때도 호출됨
  • 오버라이더블 : 부모의 함수 재정의 가능
  • 매크로 : 매크로 설정 가능

이벤트 그래프

블루프린트 코드를 작성하는 곳

  • Begin Play : 액터가 플레이 시작될 때 이벤트 발생
  • ActorBeginOverlap : 충돌 발생 시 이벤트 발생 (사용 안함)
  • Tick : 매 프레임마다 이벤트 발생
    • Delta Seconds : 전 프레임이 완료되기까지 걸린 시간 / 프레임 간 이동 사이의 시간 간격
    • FPS(Frame Per Seconds) : 1초에 몇 프레임이 그려지는지
      • 100Frame/s => DeltaTime = 1/100s
    • 컴퓨터 성능에 따라 FPS는 달라진다
    • 모든 컴퓨터마다 일정하게 시간간격을 가질수 있어, 시간을 통일성 있게 사용할 수 있게 해 준다

Mesh

  • Static Mesh
    • 자체 변형이 없는 메쉬
  • Skeletal Mesh
    • 스켈레톤이라는 뼈대를 움직여서 메쉬가 애니메이션을 동작할 수 있게끔 만들어진 메쉬
  • UPrimitiveComponent : 기하 정보를 가진 컴포넌트들은 모두 UPrimitiveComponent를 상속받고 있다

Pawn

플레이어의 분신이 되는 폰은 컨트롤러에 빙의되어 동작

  • AControllerAActor를 상속받음
  • AController는 크게 APlayerController, AAIController 두 가지로 나뉜다
  • 컨트롤러는 폰에 빙의할 수 있다
  • APlayerController실제 플레이어 -> 폰에 빙의 하여 조작
  • ACharacter 클래스는 APawn 클래스를 상속받음
    • UMovementComponent를 가지고 있음
    • ACharacter 2족보행을 할 수 있는 기본적인 캐릭터
    • 걷기, 뛰기, 수영하기 등 기본적인 물리 기능을 포함하고 있는 클래스
  • Pawn을 생성하고 플레이어 자동빙의에 player 인덱스를 지정하면 해당 pawn으로 빙의

카메라

  • 스프링 암 컴포넌트 : 부모에서 고정된 거리의 카메라
    • 스프링 암 컴포넌트를 만들고 카메라를 스프링 암의 자식으로 둔다
    • 지연 : 댐핑을 줄 수 있다
  • 시네 카메라 컴포넌트
  • 카메라 컴포넌트

게임 모드

월드의 규칙을 만들 수 있다

  • 존재하는 플레이어, 허용된 플레이어, 관람자의 수, 게임의 승리 조건
  • 월드당 하나의 게임 모드를 지정할 수 있다
  • 게임 모드도 Actor의 한 종류 (AGameMode)

월드 세팅

프로젝트 세팅

  • 맵 & 모드
    • Default Mode : 기본 게임 모드로 지정할 게임모드 선택 가능
      • 디폴트 폰 클래스
      • HUD 클래스
      • 플레이어 컨트롤러 클래스
      • 게임 스테이트 클래스
      • 플레이어 스테이트 클래스
      • 관전자 클래스
    • Default Maps : 시작 맵(씬)을 지정할 수 있음
      • 에디터 시작 맵 : Open World(Default) -> 사용자 지정 Level로 변경 가능

레벨

Unity의 씬과 같은 존재

좌표계

  • Unity와 Unreal 모두 왼손 좌표계를 사용
  • 엄지(x)와 검지(y)를 기준으로 중지(z)로 표기

이동

BP_Translate

회전

  • 트랜스폼
    • 최상위 부모는 스케일만 가짐 (월드에서 위치, 회전 값 설정 가능)
    • 상대 트랜스폼 : 부모로부터 상대적인 좌표 (Unity의 로컬 트랜스폼)
    • 월드 트랜스폼 : 월드 상의 절재적인 좌표 (Unity의 월드 트랜스폼)

BP_Rotation

입력

  • Legacy Input과 EnhancedInput 두 가지 존재
  • EnhancedInput은 BP에서 EnhancedInputLocalPlayerSubsystem을 컨트롤러로서 추가하여 사용 가능

입력 액션(Input Action)

  • 값 타입
    • Digital(Bool) : 공격, 창 열기 등
    • Axis1D (float)
    • Axis2D (Vector 2D) : 3D 게임에서의 이동
    • Axis3D (Vector 3D)

입력 매핑 컨텍스트 생성

  • 매핑
    • 트리거 : 트리거 한정자, 매핑은 다음과 같은 상황에서만 트리거 됨
  • 모디파이어 : 원시 키 값에 적용된 모디파이어, 배열 순서대로 순차 적용 됨
    • 스위즐 입력 축 값 : 1D 입력을 2D 액션의 Y축에 매핑하는 데 유용
    • 부정 : 값 반전

w, s가 동시입력 될 경우 뒤에 셋팅한 입력값으로 덮어쓰기 된다

  • 위 문제를 해결하기 위해 FB과 LB 두가지로 나눠서 액션을 작성하고 매핑 컨텍스트에 두 액션을 각각 따로 매핑해 준다
    • ‘W Key’는 x에 저장을 하고, ‘S Key’는 y에 저장을 해서 두 개를 더하면 두 키가 동시에 들어왔을 때, 0의 값을 가지게 만들 수 있다

BP_IA

  • Get Controller : IC로 만들어 진(부모 타입의 컨트롤러) 포인터 타입의 변수를 반환한다
  • Cast To PlayerController : 플레이어 컨트롤러로 다운 캐스팅하고 실패하면 nullptr을 반환
  • EnhancedInputLocalPlayerSubsystem : 컨트롤러로써 향상된 입력 로컬 플레이어 서브시스템을 얻기
  • EnhancedInputAction
    • Triggered : 누르고 있는지 체크(이동)
    • Started : 키를 누르기 시작할 때
    • Canceled : 누르기 취소
  • EnhancedActionEvents
    • IA_Move_FB : +값과 -값의 합산을 위해 스위즐 입력 축 값 ‘YXZ’에 부정을 더해
    • 대각 이동 : 벡터의 정규화를 통해 대각 이동의 길이 조정
      • 단위벡터(정규화된 벡터 : 크기가 1인 방향을 가진 벡터; 방향 벡터) * 이동속도(스칼라 값)
  • UMovement
    • 자신이 서브 오브젝트로 달린 액터(또는 캐릭터)에 일정한 형태의 이동을 제공
    • 트랜스폼이 없음
    • UPawnMovement : AI 또는 플레이어의 이동제어, Navigation 기능 포함
      • UFloatingPawnMovement : 폰 클래스에 단순한 움직임을 제공, 중력 제공 X
      • UCharacterMovement : 캐릭터 클래스의 움직임을 제공, 중력 제공 O
    • URotatingMovement : 회전 제공
    • UProjectileMovement : 투사체의 이동 제어

스폰

월드에 원하는 액터를 생성하는 것

  • SpawnActor from Class : 원하는 액터를 클래스로부터 생성
    • Class : 지정 클래스
    • Spawn Transform : 소환 지점
      • 벡터 = 단위벡터 * 스칼라 값
    • Collision Handling Override : 충돌 관련 오버라이딩
      • Always Spawn, Ignore Collision : 이펙트 등
      • Try To Adjust Location, But Always Spawn
      • Try To Adjust Location, Don’t Spawn If Still Colliding
      • Do Not Spawn


© 2023 Jinsoo Lee. All rights reserved.

Powered by Hydejack v9.1.6