Unreal Engine 5 ALS 개요1

조정원·2025년 6월 11일

ALS(Advanced Locomotion System) 에셋을 정복해보는 것을 목표로 차근차근 뜯어보면서 시작해보겠다.
Fab ALS 링크

'Advanced'라는 이름에서 알 수 있듯이, ALS는 매우 하이레벨 시스템이기 때문에 한 번에 모든 내용을 이해하기 어려운 것이 당연하다.
하나의 블루프린트 클래스만 열어보아도, 그 안에 수많은 서브 그래프와 복잡한 로직들이 빼곡히 들어차 있어 처음 접하는 입장에서는 압도되기 쉽다.
그래서 이번 글에서는 우선 폴더 안에 있는 파일들과 주요 블루프린트들을 하나씩 살펴보고, 각 블루프린트를 처음 열었을 때 보이는 구성 요소들을 중심으로 개요를 파악하는 것을 목표로 삼았다.

폴더 구조는 아래와 같다. 밑에서부터 살펴보도록 하겠다.

Props 폴더의 하위 폴더에 meshs와 materials가 있다.
meshs를 먼저 보면 스켈레탈 메시들이 쭉 있다.

인게임에서 q버튼을 누르면 모션이 바뀌거나 오브젝트를 들고 움직일 수 있다. (이는 OverLay라고 표현한다.)
OverLay가 적용되었을 때 오브젝트에 대한 메시들이 meshes폴더에 있다.

머티리얼 폴더다.

Levels 폴더는 레벨과 빌드 데이터가 존재한다.

Environment 폴더는 아래와 같다.

먼저 맵을 구성하는 큐브인 SimpleMovingBuilder, SimpleMovingObject 그리고 플로트커브가 있다.
SimpleMovingObject는 SimpleMovingBuilder를 상속받아 만들어졌다.

SimpleMovingBuilder 액터는 Construction Script에 꽤 복잡한 그래프가 포함되어 있다.
Construction Script는 액터가 생성되거나 편집될 때 실행되며,
액터의 초기 구성이나 설정을 자동으로 처리해준다.
다만, 플레이 중에는 실행되지 않는다.

이 블루프린트는 오브젝트의 외형을 디테일 패널에서 실시간으로 바꿀 수 있게 한다.

변수를 생성해준 뒤 메시, 머티리얼, 선형 컬러를 벡터 타입으로 변환한 후 Parameter Value on Materials 노드에 연결해주었다.

SimpleMovingObject는 SimpleMovingBuilder를 상속받아 움직이는 그래프를 추가한 액터다.
여기에는 스플라인 컴포넌트가 추가되어 있는데, 물체를 움직이는 경로를 생성할 수 있다.

우측의 하얀색 선이 스플라인 컴포넌트다.

실제 게임에서 볼법한 자연스러운 물체의 움직임이라 그런지 그래프는 조금 복잡하다.


가장 왼쪽 위 그래프는 Event Tick에서 Delta Seconds 값을 받아와 저장한다.
아래쪽 그래프에서는 Movement Time 변수를 Delta Seconds만큼 증가시킨 뒤 0과 트랙의 Duration 사이로 Clamp 처리한다.
정방향일 때는 Movement Time이 0부터 Duration까지 증가하며,
역방향일 때는 Duration에서 0까지 감소한다.

Movement Direction 값을 받아 두 개의 Branch를 통해 정방향과 역방향을 판단한다.
각 Branch에서는 현재 위치가 해당 방향의 끝에 도달했는지 확인한다.
만약 True라면, 이어지는 그래프에서 Movement Direction을 반대로 바꾸고,
Delay를 준 뒤 동작을 종료한다.

반면 False라면, 계속해서 물체의 위치를 업데이트한다.
위치 변경은 새로 정의한 함수인 Update Object Location에서 처리된다.


Update Object Location 함수를 열어보면 아래와 같다.

Moving Curve의 0부터 1사이의 범위중 어디인지를 선택해야하는데 이것은 Normalize to Range 노드가 수행하는 것으로 보인다. 그리고 계산된 Curve의 값으로 물체의 위치를 바꾸어주면 된다.

이어서, Data 폴더에는 Curve, DataTables, Enums, Struct와 같은 메타데이터가 저장되어있다.

Curve: 시간이나 값에 따라 변하는 값을 부드럽게 표현하는 곡선 데이터
DataTables: 표 형태로 여러 데이터를 구조체 단위로 관리하는 데이터
Enums: 미리 정의된 이름 목록으로 상태나 종류를 구분할 때 사용합
Struct: 여러 변수를 하나로 묶어 복합 데이터로 관리하는 사용자 정의 자료형

Curves에는 여러 곡선 데이터들이 포함되어 있으며 주로 애니메이션이나 움직임의 자연스러운 전환을 위해 사용된다.
특히 벡터 커브는 위치나 회전처럼 다차원 값을 표현할 수 있다.

데이터 테이블은 언리얼 구조체를 기반으로한 표 형태의 데이터로 엑셀과 같이 데이터를 저장하는 용도로 사용된다.

그다음으로 Enums(열거형)와 Struct(구조체)가 있다.


이들은 여러 변수를 묶어서 사용하기 위한 수단이지만 다른 용도를 가진다. 열거형은 여러 선택지 중 한 가지를 지정할 때 사용한다. 캐릭터의 상태(걷기, 뛰기, 점프)나 게임의 난이도(쉬움, 보통, 어려움)가 이에 해당한다.
구조체는 여러 다른 속성들을 한 군데서 관리하는 역할을 한다. 예를 들어 무기를 정의할 때 이름, 공격력, 쿨타임, 아이콘 등 다양한 정보들을 저장할 때 사용된다.

Audio 폴더는 배경과 발소리, UI 소리로 구성된다.

각 폴더에는 사운드 큐와 사운드 웨이브가 있다.
사운드 웨이브는 실제 음원 파일의 원본이다.
사운드 큐는 사운드 웨이브를 조합해서 더 복잡한 오디오를 만드는 데 사용된다.

사운드 큐를 열어보면,
사운드 웨이브 파일들을 Modulator에 연결하고 Mixer노드에서 합친 뒤 Output 노드에 연결하엿다.
Modulator는 피치(높낮이)와 볼륨(크기)을 조절하여 사운드를 랜덤하게 조정한다.
Mixer는 여러 개의 사운드를 동시에 재생시킨다.

위에는 배경의 사운드큐이고, 다음은 발소리이다.

똑같이 사운드 웨이브에 Modulator를 추가하고 두 개 이상의 사운드를 Random노드로 무작위로 하나를 재생시킨다. 그리고 Switch 노드로 조건에 따라 사운드를 재생한다.

profile
게임 AI 개발자 조정원입니다.

0개의 댓글