본문 바로가기

언리얼 개발 관련

언리얼 엔진 용어 정리

원문: https://docs.unrealengine.com/5.0/en-US/unreal-engine-terminology/

 

Unreal Engine Terminology

Covers the most commonly used terms when working with Unreal Engine.

docs.unrealengine.com

 

1. Project

언리얼 엔진 5 프로젝트는 게임의 모든 컨텐츠를 포함한다. 즉 이 프로젝트는 블루프린트나 마테리얼 같은 디스크 상의 많은 폴더를 포함한다. 사용자는 사용자가 원하는데로 프로젝트 내의 폴더를 명명하고 구성할 수 있다. 언리얼 에디터 내의 Content Browser 패널은 디스크 상의 project 폴더와 같은 디렉토리 구조를 보여준다.

 

모든 프로젝트는 .uproject라는 프로젝트와 관련된 파일을 가지고 있다. .uprjoject파일은 곧 어떻게 게임을 만들고 열고 저장하는지를 보여준다. 사용자는 병렬적으로 수많은 수의 프로젝트를 만들 수도 있다.

 

2. Blueprint

블루프린트 Visual Scripting 시스템은 완전한 게임플레이 스크립팅 시스템으로 언리얼 에디터 내에서 gameplay element를 만들 수 있게 해주며, 노드 기반의 인터페이스를 가진다. 많은 대부분의 스크립트 언어처럼 Object-Oriented class를 정의하거나 OO object를 엔진 내에 정의하기 위해 쓰인다. UE4를 사용했을 떄와 같이, 사용자는 "Blue prints"로 명명된 블루프린트를 이용하여 정의된 객체를 자주 찾게 될 것이다.

 

3. Object

객체는 언리얼 엔진에가 가장 기본적인 클래스이다. 다른말로, Object는 빌딩 블럭처럼 행동하며, 사용자의 애샛을 위한 많은 필수적인 기능들을 가진다. 언리얼 엔진 내의 거의 대부분의 것들은 Object로부터 생성된다.

 

C++에서는 UObject가 모든 객체들의 베이스 클래스가 된다. UObject는 가비지 콜랙션등과 같은 특징이 구현되어 있으며, metadata인 (UProperty)는 변수가 언리얼 에디터에 표출되고, 시리얼라이즈될 수 있도록 지원한다.

 

4. Class

클래스는 언리얼 엔진 내의 특정한 액터나 객체의 특성이나 행동을 정의한다. 클래스들은 계층적인데, 이는 Class가 부모의 클래스가 가진 정보를 상속하고, 이것을 자식들에게 전달한다는 의미이다. 클래스는 C++ 코드나 Bluepinrt로 만들어질 수 있다.

 

5. Actor

액터는 카메라나, 스태틱 메시나, 플레이어 시작 위치등과 같이 레벨에 존재할 수 있는 모든 객체를 의미한다. 액터는 회전, 이동, 스케일링 같은 3차원 변환을 지원한다. 액터는 c++이나 블루프린트로 만든 게임플레이 코드로부터 생성되거나 삭제될 수 있다.

 

C++에서는 AActor가 모든 액터의 베이스 클래스이다.

 

6. Casting (개념이 약간 어렵다)

캐스팅은 특정한 클래스의 액터를 취해서 다른 클래스에서 사용할 수 있게끔 해준다(?) 캐스팅은 성공하거나 실패할 수 있다. 캐스팅이 성공하면 개발자는 cast하고자 하는 Actor의 클래스 특화 기능에 접근할 수 있게 된다. 

 

예를 들면, 플레이어 캐릭터에 다양한 방식으로 영향을 줄 수 있는 여러 타입의 볼륨이 있는 게임을 만든다고 가정해보자. 볼륨 중 하나는 Fire이고 Fire는 플레이어의 체력을 깍는다. 플레이어가 레벨 내의 모든 볼륨에 닿는 경우에 대해 volume을 fire에 캐스트 해서 체력 깍기 기능에 접근할 수 있다. 

 * 만약 캐스트가 성공한다면, 다른 말로 플레이어가 fire 상에 있다면, 체력이 깍인다.

 * 만약 캐스트가 실패한다면, 다른말로 fire가 아닌 volume에 있다면, 체력이 깎이지 않는다. 

 

캐스팅은 단순히 액터가 주어진 클래스에 있는지를 체크하는 것과는 좀 다르다. 캐스팅은 binary answer를 주는 대신 특정 클래스의 기능과 익터랙션할 수 있게 해준다.

 

7. 컴포넌트

컴포넌트는 액터에 추가될 수 있는 하나의 기능조각이다.

 

액터에 컴포넌트를 추가하면, 액터는 컴포넌트가 제공하는 기능을 사용할 수 있게 된다.  

 

예를들면,

 * Spot light component는 Actor가 빛을 발할 수 있게 한다. 

 * Rotating Movement Component는 액터가 회전하게 한다.

 * Audio 컴포넌트는 액터가 소리를 낼 수 있게 한다.

 

컴포넌트들은 그들만으로는 기능할 수 없고 반드시 액터에 추가되어야 한다.

 

8. Pawn

pawns는 액터의 서브클래스로, 인게임 아바타를 제공하게 된다. pawn은 플레이어나 게임 AI, NPC의 형태로 컨트롤 된다.

 

Pawn이 사람이나 AI로부터 제어되게 되면, 이걸 Paussessed라는 형태로 부른다. 반대의 경우 Unpossessed라고 부른다.

 

9. Character

캐릭터는 Pawn Actor의 서브클래스로, 플레이어 캐릭터로 쓰이도록 고안되었다. 캐릭터 서브클래스는 충돌 셋업이나, 인풋 바인딩, 추가적인 컨트롤에 대한 코드 등을 가질 수 있다.

 

10. Player Controller

플레이어 컨트롤러는 플레이어의 입력을 받아서 실시간의 게임 내 인터랙션으로 변환해준다. 모든 게임은 적어도 하나의 플레이어 컨트롤러를 가진다. 플레이어 컨트롤러는 pawn이나 character를 가질 수 있다.

 

플러이어 컨트롤러는  또한 멀티플레이어 게임의 주요한 네트워크 인터랙션 포인트이기도 하다. 멀티플레이 시, 서버는 게임 내의 모든 플레이어들의 플레이어컨트롤러 인스턴스를 가지기 때문에 각각의 플레이어들에게 네트워크 기능을 호출할 수 있다. 각 클라이언트들은 자신의 플레이어에 대한 플레이어컨트롤러를 가지고, 그 외의 플레이어들은 서버의 플레이어 컨트롤러를 이용하게 된다.

 

관련된 C++ 클래스는 PlayerController이다.

 

11. AI Controller

AI 컨트롤러는 게임 내의 NPC로 표현되는 Pawn을 소유하게 된다. 기본적으로 Pawn과 Character는 결국 Player controller를 가지지 않거나 AI 컨트롤러를 만들지 않아도 자동적으로 base AI controller를 가지게 된다.

 

관련된 C++ 클래스는 AIController이다.

 

12. Player State

플레이어 상태는 게임 내의 특정인의 상태를 의미한다. NPC의 경우는 Player state를 가지지 않는다.

 

플레이어 상태가 포함할 수 있는 플레이어 정보의 예제는 다음과 같다.

 * 이름

 * Current Level

 * Health

 * Score

 *기타 Flag들

 

멀티플레이어 게임의 경우 모든 머신에 존재하는 전 플레이어들의 상태는 서버에서 클라이언트로 전달받는 형태로 구현되어 싱크를 맞추게 된다. 이는 플레이어 컨트롤러와 다른 구조를 가지게 된다.

 

관련된 C++ 클래스는 PlayerState이다.

 

13. Game State

게임 상태는 게임의 모든 클라이언트들에게 복제되기를 원하는 정보를 보유하는 컨테이너다. 간단하게 말해서, 모든 접속자들을 위한 게임의 상태이다. 

 

게임 상태는 하단의 예시들을 가질 수 있다. 

 * 게임 점수에 대한 정보

 * 매치가 시작되었는지의 여부

 * 얼마나 많은 AI 캐릭터가 월드에 생성되었는지의 여부

 

멀티 플레이어 게임의 경우, 각 플레이어의 머신에 각자의 로컬 게임 상태 인스턴스가 있다. 로컬의 게임 상태 인스턴스는 서버로부터 업데이트 된다.

 

관련된 C++ 클래스는 GameState이다.

 

14. Brush

브러쉬는 큐브, 스피어와 같이 3D 형상을 기술하는 액터이다. 사용자는 브러쉬를 레벨에 배치해서 레벨 지오메트리를 정의할 수 있다. 

 

15. Volume

볼륨은 닫힌 3D 공간으로, 부착된 다양한 이펙트들을 이용하여 여러 용도로 활용될 수 있다.

 

예를 들면, 

 * 블로킹 볼륨은 보이지 않으면서 유저가 지나가지 못하게 한다.

 * 고통유발 볼륨은 유저가 닿으면 데미지를 준다.

 * 트리거 볼륨은 유저가 닿으면 이벤트를 발생시킨다. 

16. Level

레벨은 개발자가 정의한 게임플레이 영역이다. 레벨은 플레이어가 보거나 인터랙션할 수 있는 지오메트리, Pawns, actor를 모두 포함한다.

 

언리얼 엔진은 각 레벨을 .umap 파일로 저장하며, 이 파일들은 Map으로 언급되는걸 볼 수 있다.

 

17. World

월드는 게임을 구성하는 모든 레벨의 컨테이너다. 월드는 레벨이나 다이나믹 액터의 생성들을 관리한다.