언리얼을 시작하자!

정혜창·2024년 12월 16일
0

내일배움캠프

목록 보기
6/43
post-thumbnail

드디어 언리얼 캠프가 시작되었다!!! 우선 오늘은 라이브세션 강의로 진행되었고 첫날인만큼 간단하게 진행되었다. 언리얼을 설치하고 수업에 필요한 프로젝트를 설치한 뒤 기본적인 툴을 감각적으로 익히는 정도랄까? '첫날부터 빡세게 진도가 나가버리면 정신없어서 어떡하지' 하는 생각을 했었는데 내심 다행이라는 생각을 하였다.

학습에 앞서

일단 사전캠프 때 프로젝트를 통해 툴을 어떤 용도로 사용하는 건지 아주 조금 이해하긴 했지만 오늘은 언리얼에 대한 것을 감각적으로 익히는 날인 만큼 내가 알던 기능도 추가적인 활용법이 있을 수도 있고 또한 아직 탐구하지 않은 기능이 있기에 이것을 배우고 싶다는 생각을 했다. 그러나 무작정 배우기엔 쉽지 않았고 웹서핑을 한 결과 언리얼코리아 공식 유튜브 채널과 언리얼 공식홈페이지의 설명이 있어서 참조하게 되었다.

학습내용

뷰포트

우선 뷰포트는 언리얼을 켰을 때 화면에 보여지는 영역을 의미한다. 사용자는 뷰포트를 통해 작업물, 작업의 진행 등을 전체적, 또는 세부적으로 볼 수 있다. 키보드와 마우스를 활용해서 수영장에 유영하듯이 자유롭게 탐험할 수 있다.

좌클릭 + 드래그 : 카메라 전후 평행이동, 좌우회전
우클릭 + 드래그 : 현재위치에서 카메라 회전
휠버튼 + 드래그 : 상하좌우 평행이동

마우스임의버튼 + w a s d : 전후좌우 이동
q,e : 상하 평행이동

스타크래프트 부대지정 처럼 카메라위치를 북마크처럼 저장가능하다
카메라 레이아웃 북마크에 저장 : ctrl + 숫자키
카메라 레이아웃 북마크 불러오키 : 지정한 숫자키

레벨

언리얼에서는 레벨이라는 개념을 이해해야 한다. 언리얼에서 레벨이란 게임 경험을 생성하는 씬을 레벨이라고 하고 게임을 플레이할 때 보고 만질 수 있는 모든 오브젝트는 바로 이 '레벨' 속에 들어가 있다. 즉, 레벨이란 스태틱 메시, 볼륨, 라이트, 블루프린트 등으로 이루어진 것으로, 이 모든 것이 어우러져서 게임을 플레이하는 플레이어에게 모든 경험을 선사해 준다. 레벨 규모는 거대 지향 기반 월드에서부터 액터 몇 개로 이루어진 매우 작은 레벨까지 다양하다.

컨텐츠 브라우저

레벨에 오브젝트를 배치하기 위해선 컨텐츠 브라우저를 이용해야 한다. 레벨이나 환경 그리고 컨텐츠를 구축하는데 필요한 재료들을 관리하고 저장하는 곳이다. 언리얼5 에선 컨텐츠 브라우저를 쉽게 관리, 사용하기 위해 컨텐츠 드로어라는 인터페이스가 있는데 ctrl + spacebar 을 누르면 나온다.

스태택 메시

언리얼에서 스태틱 메쉬는 자체적인 변형이 없는 메쉬를 뜻한다.
예를 들어 의자나 벽처럼 기본 상태에선 움직이지 않는 사물들 즉, Props을 스태틱 메쉬라고 보면 된다.

컨텐츠 브라우저에서 스태틱 메시를 클릭하여 뷰포트로 드래그하면 레벨에 배치된다. 배치하면 트랜스폼 툴 (xyz 축 있는것)로 이동, 크기조절, 회전이 가능하다. 처음에 이동을 할 때 딱딱 끊기면서 이동이 되는데 스냅이 걸려있어서 그렇다. 뷰포트 오른쪽위 스냅을 해제하면 부드럽게 조절이 가능하다.

오브젝트가 선택된 상태에서 F키 : 카메라 포커스 정렬
오브젝트가 선택된 상태에서 Alt + 좌클릭 + 드래그 : 오브젝트 기준으로 카메라 선회
오브젝트가 선택된 상태에서 Alt + 우클릭 + 드래그 : 오브젝트 기준으로 줌인아웃
오브젝트가 선택된 상태에서 Alt + 휠버튼 + 드래그 : 카메라의 로컬기준으로 상하좌우 이동

몇몇의 스태틱 메시들은 피봇(회전체의 중심)이 오브젝트의 중심에 있는 경우가 있다. 이럴 때 레벨에 메시를 배치하면 파묻히는 경우가 있는데 이는 바닥에 피봇이 정렬되기 때문이다. 이럴 때 오브젝트를 선택하고 End 키를 누르면 아래로 정렬하게 된다. 하지만 그래도 불편한 경우가 있으므로 모델링 모드를 활용해서 직접 피봇의 위치를 수정할 수 있다. 모델링 모드는 피봇의 위치수정 뿐만이 아니라 메시를 다방면으로 수정하게 해준다.

언리얼 에디터 인터페이스

  • 메뉴 바 : 에디터의 최상단에 있는 바이다. 여기에 있는 메뉴를 사용하여 에디터 특정 명령과 함수 기능을 엑세스 할 수 있다.
  • 메인 툴바 : 메뉴 바 밑에 있는 가로로 된 바이다. 언리얼 엔진의 가장 일반적인 툴과 에디터 일부를 위한 단축 키를 포함하고 있으며, 이 단축기를 통해 플레이(에디터에서 게임 실행) 모드를 입력하고 프로젝트를 기타 플랫폼에 디플로이 할 수 있다.
  • 레벨 뷰포트 : 레벨 콘텐츠를 표시한다.
  • 콘텐츠 드로어 : 프로젝트의 모든 에셋에 액세스 할 수 있다.
  • 하단 툴바 : 명령 콘솔, 출력 로그, 파생 데이터 기능의 단축키가 포함되어 있다. 소스 컨트롤 상태도 표시된다.
  • 아웃라이너 : 레벨의 모든 콘텐츠에 대한 계층 트리 뷰를 표시한다. (배치된 모든 에셋을 표시)
  • 디테일 패널 : 액터 선택 시 나타난다. 트랜스폼, 스태틱 메시, 머터리얼, 피직스 세팅과 같은 해당 액터를 위한 다양한 프로퍼티를 표시한다.

툴바에 있는 메뉴들과 메시의 디테일을 만져보면서 젖은 땅을 구현해보기도 하고 캐릭터에 부딫히면 움직이는 공을 배치해보기도 하였다. 언리얼의 다양한 기능을 통해 다양한 사물을 구현할 수 있겠다라는 것을 감각적으로 배울 수 있었던 것 같다. 하지만 여러 문서들과 영상들을 봤을 때 아리송한 용어가 생각보다 많아서 불편함이 있었는데 언리얼 공식홈페이지에서 언리얼 엔진용어를 배울 수 있었다. 다음은 엔진용어들에 대해 공부한걸 적어보았다.

언리얼 엔진용어

프로젝트

언리얼 엔진 5 프로젝트는 게임의 모든 콘텐츠를 담고있다. 프로젝트에는 블루프린트, 머터리얼 등 하드디스크 안의 많은 폴더가 포함된다. 언리얼 에디터의 콘텐츠 브라우저패널은 하드디스크의 프로젝트 폴더와 동일한 디렉터리 구조를 보여준다.

모든 프로젝트에는 연관된 .uproject 파일이 있고 이것으로 프로젝트를 생성하거나, 열고 저장할 수 있다.

블루프린트

블루프린트는 비주얼 스크립팅 시스템으로 노드 기반의 인터페이스를 사용하여 언리얼 에디터 내의 게임플레이 엘리먼트를 생성하는 완전한 게임플레이 스크립팅 시스템이다. 블루프린트는 엔진에서 객체지향 클래스 또는 오브젝트를 정의하기 위해 사용된다.

오브젝트

오브젝트는 언리얼 엔진에서 가장 기본적인 클래스이다. 오브젝트는 구성단위 역할을 하며, 에셋에 필수적인 기능을 많이 포함하고 있다. 언리얼 엔진에서는 거의 모든 것이 오브젝트로부터 상속받거나 함수 기능을 사용한다.

클래스

클래스는 언리얼 엔진에서 특정 액터나 오브젝트의 행동과 프로퍼티(속성)를 정의한다. 클래스는 계층적이다. 즉 정보를 부모 클래스로부터 상속받거나 자손 클래스에게 다시 상속하기도 한다. 클래스는 C++ 코드나 블루프린트로 생성될 수 있다.

액터

액터는 카메라, 스태틱 메시, 플레이어 스타트 위치 등과 같이 레벨에 배치할 수 있는 모든 오브젝트를 가리킨다. 액터는 이동, 회전, 스케일링 등의 3D 트랜스폼을 지원한다. 또한 C++ 또는 블루프린트를 통해 생성(스폰) 및 소멸될 수 있다.

연관된 C++ 클래스는

AActor

형변환

형변환은 특정 클래스의 액터를 다른 클래스인 것처럼 간주하려 시도하는 작업이다. 성공할 수 있고 실패할 수 있지만 성공하면 형변환한 액터의 클래스 전용 기능에 액세스 할 수 있다.

컴포넌트

컴포넌트는 액터에 추가할 수 있는 기능 조각이다.

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

  • 스포트 라이트 컴포넌트는 액터가 스포트 라이트처럼 빛을 내게 한다.
  • 로테이팅 무브먼트 컴포넌트는 액터가 회전하게 한다.
  • 오디오 컴포넌트는 액터가 사운드를 재생하게 한다.

컴포넌트는 액터에 추가되어야 하며, 단독으로는 존재할 수 없다. 약간 이벤트 발생기(?) 같은 느낌으로 이해하면 될듯.

은 액터의 서브클래스이며, 인게임 아바타 또는 페르소나(게임 안의 캐릭터)의 역할을 한다. 폰은 플레이어 또는 AI로 제어되는 NPC등이 있다.

인간이나 AI가 폰을 제어하면, 그 폰은 '빙의된 상태'(Possessed)로 간주한다. 반대로 인간이나 AI가 제어하지 않는 폰은 빙의(Unpossessed) 해제된 것으로 여겨진다.

캐릭터

캐릭터는 플레이어 캐릭터로 사용하기 위한 폰 액터의 서브클래스이다. 즉 캐릭터는 폰에 속한다! 캐릭터 클래스에는 콜리전 설정, 바이패트 움직임을 위한 입력 바인딩, 플레이어가 제어 하는 움직임을 위한 추가 코드 등이 포함된다.

플레이어 컨트롤러

플레리어 컨트롤러는 플레이어의 입력을 게임 안의 상요작용으로 변환한다. 모든 게임에는 최소 하나의 플레이어 컨트롤러가 있으며 게임 안에서 플레이어를 나타내는 폰이나 캐릭터에 빙의할 때가 많다.

플레이어 컨트롤러는 또한 멀티플레이어 게임의 주요한 네트워크 상호작용 지점이다. 멀티플레이어 게임의 플레이 동안에는 서버가 각 플레이어에게 네트워크 함수 호출을 할 수 있어야 하기 때문에 게임 안의 모든 플레이어에 대해 하나의 플레이어 컨트롤러 인스턴스를 지닌다. 각 클라이언트는 자신의 플레이어에 해당하는 플레이어 컨트롤러만을 가지고, 서버와 통신하는 용도로만 사용할 수 있다.

연관된 C++ 클래스는

APlayerController

AI 컨트롤러

플레이어 컨트롤러가 게임 안에 플레이어를 나타내는 폰을 소유하듯이, AI컨트롤러도 게임 안에 NPC를 나타내는 폰을 소유한다.

연관된 C++ 클래스는

AAIController

플레이어 스테이트

플레이어 스테이트 게임 참여자의 스테이트를 말한다. 인간 플레이어 또는 플레이어를 시뮬레이션하는 봇 등이 있다. 게임 월드의 일부로 존재하는 논플레이어 AI경우 플레이어 스테이트가 없다. (플레이어 정보창이라고 생각하면 될듯)

연관된 C++ 클래스는

AplayerState

게임 모드

게임 모드는 플레이 중인 게임의 규칙을 설정한다. 규칙에는 다음이 포함될 수 있다.

  • 플레이어가 게임에 참여하는 방법
  • 게임의 일시 정지 가능 여부
  • 승리 조건 등 특정 게임 전용 행동

프로젝트 세팅에서 디폴트 게임 모드를 설정하고 레벨별로 오버라이드할 수 있다. 어떤 방법으로 구현하듯, 하나의 레벨에는 하나의 게임모드만 존재한다.

연관된 C++ 클래스는

AGameMode

게임 스테이트

게임 스테이트는 게임 내의 모든 클라이언트에 복제할 정보가 들어 있는 컨테이너이다. 쉽게 말해 연결된 모든 사람에 대한 '게임의 스테이트'를 뜻한다.

  • 게임점수에 대한 정보
  • 대결이 시작됐는지 여부
  • 월드에 있는 플레이어 수를 기준으로 스폰할 AI 캐릭터의 수

멀티플레이어 게임의 경우 게임 스테이트에 대한 로컬 인스턴스가 각 플레이어의 컴퓨터에 하나씩 있다.

연관된 C++ 클래스는

AGameState

브러시

브러시는 큐브, 구체와 같은 3D 셰이프를 묘사하는 액터이다. 레벨에 브러시를 배치하여 레벨 지오메트리를 정의할 수 있다. 이를 바이너리 스페이스 파티션 또는 BSP 브러시라고 한다. 레벨의 윤곽 작업을 빠르게 하고 싶은 경우 등에 유용하다.

볼륨

볼륨은 연결된 효과에 따라 용도가 달라지는 바운드된 3D 공간이다. 예를 들면

  • 블로킹 볼륨은 보이지 않으며 액터가 통과하지 못하게 막습니다. (투명 벽)
  • 페인 코징 볼륨은 오버랩되는 액터에 시간이 지남에 따라 데미지를 줍니다. (자기장 : 배그생각하면 됨)
  • 트리거 볼륨은 액터가 들어오거나 나갈 때 이벤트를 유발하도록 프로그래밍됩니다. (카트라이더 바퀴수 세주는 그런 역할? 용도가 다양할 듯)

레벨

레벨은 여러분이 정의하는 게임플레이 영역이다. 레벨에는 지오메트리, 폰, 액터 등과 같이 플레이거가 보고 상호작용할 수 있는 모든 것이 포함된다. 언리얼 엔진은 각 레벨을 별도의 .umap 파일로 저장한다. 그래서 레벨이 이라고 불리기도 한다.

월드

월드는 게임을 구성하는 모든 레벨이 담겨있는 컨테이너이다. 월드는 레벨의 스트리밍과 다이내믹 액터의 스폰(생성)을 처리한다.

회고

사실 이러한 용어와 엔진에 대한 간단한 정보들은 사전캠프 첫 날에 배웠다. 아무것도 모르는 상태로 인터넷을 서핑하며 velog에 첫 글로 작성했었다. 하하 지금생각하면 정말 엉성하고 부족하기 짝이 없는 글이다. 같은 내용이라도 조금 배웠다고 이렇게 달라지는게 신선하다. 이제 조금은 앞으로 어떻게 배워야할지, 방향, 노력 그리고 어려움이 어렴풋하게나마 보이는 느낌이다. 앞으로 배움에 따라 오늘날의 시선은 또 달라져 있겠지. 너무 궁금하고 설렌다. 내가 조금은 레벨업을 했다는 것이 느껴져 기분 좋기도 하고 앞으로 배울것이 많기에 한번 더 다짐하는 그런 과제였었던것 같다. 앞으로도 화이팅!

profile
Unreal 1기

0개의 댓글

관련 채용 정보