TIL - Today I Learned : 언리얼 엔진의 기본 용어들에 익숙해지자
오늘의 진도: Section 1: 강좌 소개 및 설치 ~ Section 2: 창고 부수기 14.오브젝트와 레퍼런스
블루프린트에는 미리 준비해둔 기능들이 있고 그걸 하나씩 꺼내쓴다.
코드를 작성하는게 아닌 이렇게 노드들을 연결해서 작업하는걸 비주얼 스크립핑 이라 함.
UE5.1 부터 StarterContent 폴더의 작동 방식이 변경 되었다고 한다.
프로젝트를 열면 디폴트 맵의 변경사항이 전부 덮어씌워지므로,
디폴트 맵을 수정하려면 맵을 복제하고 StartContent 폴더 외부에 저장해야한다.
강의를 들으면 용어가 머리에 들어오지 않을 때가 있어서 한번 정리하고 두고두고 봐야겠다.
블루프린트(Blueprint)
블루프린트 비주얼 스크립팅(Blueprint Visual Scripting) 시스템은 노드(Node) 기반의 인터페이스를 사용하여 언리얼 에디터 내의 게임플레이 엘리먼트를 생성하는 완전한 게임플레이 스크립팅 시스템이다. 여러 일반적인 스크립팅 언어와 마찬가지로, 블루프린트 비주얼 스크립팅도 엔진에서 오브젝트 지향(Object-Oriented, OO) 클래스 또는 오브젝트를 정의하기 위해 사용된다.
오브젝트(Object)
오브젝트 는 언리얼 엔진에서 가장 기본적인 클래스이다. 오브젝트는 구성단위 역할을 하며, 에셋에 필수적인 기능을 많이 포함하고 있으며 언리얼 엔진에서는 거의 모든 것이 오브젝트로부터 상속받거나 함수 기능을 사용한다.
C++에서 UObject 는 모든 오브젝트의 베이스 클래스이다. 가비지 컬렉션, 언리얼 에디터에 변수를 노출하기 위한 메타데이터(UProperty ) 지원, 로딩 및 저장 직렬화 등의 기능을 구현한다.
클래스(Class)
클래스 는 언리얼 엔진에서 특정 액터나 오브젝트의 행동과 프로퍼티를 정의한다. 클래스는 계층적이다. 즉, 정보를 부모 클래스(해당 클래스가 파생된 클래스)로부터 상속받고 자손 클래스에게 다시 상속한다. 클래스는 C++ 코드나 블루프린트로 생성할 수 있다.
액터(Actor)
액터 는 카메라, 스태틱 메시, 플레이어 스타트 위치 등과 같이 레벨에 배치할 수 있는 모든 오브젝트이다. 액터는 이동, 회전, 스케일링 등의 3D 트랜스폼을 가진다. 또한 C++ 또는 블루프린트 게임플레이 코드를 통해 생성 및 소멸될 수 있다. C++에서 AActor 는 모든 액터의 베이스 클래스이다.
형변환(Casting)
형변환 은 특정 클래스의 액터를 다른 클래스인 것처럼 간주하려 시도하는 작업이다. 형변환은 성공할 수도 있고 실패할 수도 있다.(GameObject.Find같은 듯).. 성공하면 형변환한 액터의 클래스 전용 기능에 액세스할 수 있다.
예를 들어 플레이어 캐릭터에 다양한 방식으로 영향을 미치는 여러 타입의 볼륨이 있는 게임을 만드는 중이라고 가정하면, 이러한 볼륨 중 하나는 화염으로, 시간이 지남에 따라 플레이어의 체력을 감소시킨다. 레벨에서 플레이어가 어느 볼륨에든 오버랩되면, 해당 볼륨을 화염 으로 형변환 하여 ""플레이어 체력 대미지(damage player health)"" 기능에 액세스를 시도할 수 있다.
형변환이 성공하여 플레이어가 화염 속에 서 있게 되면, 플레이어의 체력이 감소하기 시작하고
형변환이 실패하여 플레이어가 다른 타입의 볼륨에 서 있게 되면, 체력에 영향을 받지 않는다.
형변환은 단순히 액터가 특정 클래스에 속하는지 확인하는 것만이 아니다. 그 경우 바이너리 응답(예 또는 아니오)을 반환하지만, 해당 클래스의 특정 함수 기능과 상호작용하지는 못한다.
폰(Pawn)
폰 은 액터의 서브클래스이며, 인게임 아바타 또는 페르소나(게임 안의 캐릭터 등)의 역할을 합니다. 폰은 플레이어 또는 게임 AI 로 제어되는 NPC(논플레이어 캐릭터) 등이 있다. 인간이나 AI 플레이어가 폰을 제어하면, 그 폰은 빙의된(Possessed) 상태로 간주하고 반대로 인간이나 AI 플레이어가 제어하지 않는 폰은 빙의 해제된(Unpossessed) 것으로 여긴다.
캐릭터(Character)
캐릭터 는 플레이어 캐릭터로 사용하기 위한 폰 액터의 서브클래스이다. 캐릭터 클래스에는 콜리전 설정, 바이페드(Biped) 움직임을 위한 입력 바인딩, 플레이어가 제어하는 움직임을 위한 추가 코드 등이 포함된다.
플레이어 컨트롤러(Player Controller)
플레이어 컨트롤러 는 플레이어의 입력을 게임 안의 상호작용으로 변환한다. 모든 게임에는 최소 하나의 플레이어 컨트롤러가 있으며 게임 안에서 플레이어를 나타내는 폰이나 캐릭터에 빙의할 때가 많다.
플레이어 컨트롤러는 또한 멀티플레이어 게임의 주요한 네트워크 상호작용 지점이다. 멀티플레이어 게임의 플레이 동안에는 서버가 각 플레이어에게 네트워크 함수 호출을 할 수 있어야 하기 때문에 게임 안의 모든 플레이어에 대해 하나의 플레이어 컨트롤러 인스턴스를 가진다. 각 클라이언트는 자신의 플레이어에 해당하는 플레이어 컨트롤러만을 가지고, 서버와 통신하는 용도로만 사용할 수 있다.
연관된 C++ 클래스는 APlayerController 이다.
AI 컨트롤러(AI Controller)
플레이어 컨트롤러가 게임 안에 플레이어를 나타내는 폰을 소유하듯이, AI 컨트롤러 도 게임 안에 NPC를 나타내는 폰을 소유한다. 폰과 캐릭터는 특정 플레이어 컨트롤러가 빙의했거나 스스로 AI 컨트롤러를 생성하지 말라는 명령을 받지 않았다면 기본적으로 베이스 AI 컨트롤러에 빙의된다. 연관된 C++ 클래스는 AAIController 이다.
플레이어 스테이트(Player State)
플레이어 스테이트 게임 참여자의 스테이트를 말한다. 인간 플레이어 또는 플레이어를 시뮬레이션하는 봇 등이 있으며 게임 월드의 일부로 존재하는 논플레이어 AI의 경우 플레이어 스테이트가 없다.
플레이어 스테이트에 포함되는 플레이어 정보의 예는 다음과 같다.
이름
현재 레벨
체력
점수
깃발 뺏기(Capture the Flag) 게임에서 현재 깃발을 들고 있는지 여부
멀티플레이어 게임의 경우 모든 컴퓨터에 모든 플레이어의 플레이어 스테이트가 존재하며, 동기화를 유지하기 위해 서버에서 클라이언트로 데이터를 리플리케이트할 수 있다. 이는 특정 플레이어 컨트롤러가 나타내는 플레이어의 컴퓨터에만 존재하는 플레이어 컨트롤러와는 다르다.
연관된 C++ 클래스는 APlayerState 이다.
게임 모드(Game Mode)
게임 모드 는 플레이 중인 게임의 규칙을 설정하고 규칙에는 다음이 포함될 수 있다.
플레이어가 게임에 참여하는 방법.
게임의 일시 정지 가능 여부.
승리 조건 등 특정 게임 전용 행동.
프로젝트 세팅에서 디폴트 게임 모드를 설정하고 레벨별로 오버라이드할 수 있다. 어떤 방법으로 구현하든, 한 레벨에는 하나의 게임 모드만 존재할 수 있다.
멀티플레이어 게임의 경우 게임 모드는 서버에만 존재하며, 연결된 각 클라이언트에 규칙이 복제(전송)된다.
연관된 C++ 클래스는 AGameMode 이다.
게임 스테이트(Game State)
게임 스테이트 는 게임 내의 모든 클라이언트에 복제할 정보가 들어 있는 컨테이너이다. 연결된 모든 사람에 대한 '게임의 스테이트'를 말한다.
다음은 게임 스테이트의 몇 가지 예이다.
게임 점수에 대한 정보.
대결이 시작됐는지 여부.
월드에 있는 플레이어 수를 기준으로 스폰할 AI 캐릭터의 수.
멀티플레이어 게임의 경우 게임 스테이트에 대한 로컬 인스턴스가 각 플레이어의 컴퓨터에 하나씩 있다. 로컬 게임 스테이트 인스턴스는 서버의 게임 스테이트 인스턴스에서 업데이트된 정보를 가져온다.
연관된 C++ 클래스는 AGameState 이다.
브러시(Brush)
브러시 는 큐브, 구체와 같은 3D 셰이프를 묘사하는 액터이다. 레벨에 브러시를 배치하여 레벨 지오메트리를 정의할 수 있다. 이를 바이너리 스페이스 파티션(Binary Space Partition) 또는 BSP 브러시라고 한다. 레벨의 윤곽 작업을 빠르게 하고 싶은 경우 등에 유용하다.
볼륨(Volume)
볼륨 은 연결된 효과에 따라 용도가 달라지는 바운드된 3D 공간이다..
예를 들면..
블로킹 볼륨(Blocking Volumes) 은 보이지 않으며 액터가 통과하지 못하게 막는다.
페인 코징 볼륨(Pain Causing Volumes) 은 오버랩되는 액터에 시간이 지남에 따라 대미지를 준다.
트리거 볼륨(Trigger Volumes) 은 액터가 들어오거나 나갈 때 이벤트를 유발하도록 프로그래밍된다.
레벨(Level)
게임을 플레이 하는 영역으로 유니티의 씬(Scene)과 같은 개념이다. 레벨에는 지오메트리, 폰, 액터 등과 같이 플레이어가 보고 상호작용할 수 있는 모든 것이 포함된다.
언리얼 엔진은 각 레벨을 별도의 .umap 파일로 저장하고 레벨이 맵 이라고 불리기도 한다.
월드(World)
월드 는 게임을 구성하는 모든 레벨이 담겨 있는 컨테이너이다. 월드는 레벨의 스트리밍과 다이내믹 액터의 스폰(생성)을 처리한다.
언리얼 엔진 용어
언리얼 엔진으로 작업할 때 자주 사용하는 용어를 다룹니다.
dev.epicgames.com
'Unreal Engine > Udemy:UE5 C++ 학습하고 게임 만들기' 카테고리의 다른 글
| Unreal Day - 11 - Classes and Instances (0) | 2024.03.25 |
|---|---|
| Unreal Day - 10 - Adding impulse (0) | 2024.03.24 |
| Unreal Day - 8- Distance Matching & Pose Warping (0) | 2024.03.18 |
| Unreal Day - 7 - You just activated my trap card (0) | 2024.03.18 |
| Unreal Day - 6 - Run Forrest, Run! (1) | 2024.03.16 |