개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/join

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 언리얼 엔진 5의 핵심인 나나이트 가상화 지오메트리 시스템에 대해서 알아봅시다.

 

사용 엔진 버전 : 5.0.3

 

타임라인

0:00 인트로

0:09 나나이트란?

0:34 나나이트의 기본 원리

2:55 나나이트의 제약

3:10 나나이트 메시 임포트

4:11 나나이트 시각화

5:51 나나이트 활성화

6:33 아웃트로

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 나나이트 가상화 지오메트리 시스템에 대해서 알아보겠습니다.

나나이트란?

나나이트란 새로운 내부 메시 포맷과 렌더링 기술을 사용하여 픽셀 스케일의 디테일과 다수의 오브젝트를 렌더링하는 언리얼 엔진 5에 새로 도입된 가상화 지오메트리 시스템입니다.

나나이트 지오메트리를 사용하므로써 우리는 ZBrush에서 스컬핑한 하이폴리 메시나 3D 스캔을 통해 제작된 메가 스캔 모델처럼 최소 수백만 개의 폴리곤으로 만들어진 영화 품질의 아트를 퀄리티 손실없이 사용할 수 있게 됩니다.

나나이트의 기본 원리

먼저 나나이트 가상화 지오메트리 시스템의 기본적인 원리를 가볍게 설명해 보겠습니다.

나나이트에서는 엄청나게 많은 수의 트라이앵글 중에 일정 수를 클러스터라는 단위로 묶어줍니다.

이렇게 묶인 클러스터는 또 다시 몇 개를 묶어 부모 클러스터로 만듭니다.

이런 과정을 나나이트 시스템에서 자동으로 처리합니다.

이렇게 만들어진 클러스터들을 카메라가 바라보는 시점에 따라서 컬링하는 것입니다.

일반적인 오클루전 컬링은 그리지 않을 대상을 오브젝트 단위로 판별합니다.

그래서 메시가 겹쳐있다고 하더라도 조금이라도 보이면 오브젝트 전체를 렌더링하고 그 위에 그 오브젝트를 가릴 오브젝트를 덮어씌워 렌더링합니다.

하지만 나나이트에서는 앞에서 말한 클러스터를 이용해 카메라에 보이는 클러스터만 렌더링하고 겹쳐져서 가려진 부분은 나나이트가 컬링해서 렌더링하지 않도록 처리합니다.

그렇기 때문에 가려진 오브젝트더라도 오브젝트 전체를 그려야 하는 오클루전 컬링과 달리 카메라에 보이는 클러스터만 그리면 되기 때문에 성능 상 이점이 훨씬 많습니다.

다만 여기서 유의해야할 점은 나나이트에서 클러스터 컬링을 처리할 때 표면 사이의 거리가 너무 가깝게 많이 겹쳐있으면 오버드로 판정으로 인해 소모하는 비용이 커지고 퍼포먼스가 저하될 수 있다는 점입니다.

다시 원래 클러스터 이야기로 돌아와보겠습니다.

이렇게 클러스터를 묶어서 트리 구조로 만들면 카메라와의 거리에 따라 어떤 클러스터 묶음을 보여줄 지 나나이트가 자동으로 선택하고 그리지 않아도 되는 디테일 단계는 메모리에 저장하지 않도록 처리합니다.

한마디로 자동으로 LOD가 처리되는 겁니다.

일반적인 LOD는 거리에 따라 오브젝트의 퀄리티를 떨어뜨리기 위해서 퀄리티를 낮춘 모델을 직접 만들어야 했습니다.

하지만 나나이트 시스템에서는 로우 퀄리티의 메시를 직접 만들고 거리에 따른 LOD 설정을 수동을 할 필요가 없으며 LOD가 자동으로 처리되며 LOD가 전환될 때 퀄리티 손실이 거의 발생하지 않습니다.

그리고 하이퀄리티 메시를 거의 그대로 사용하기 때문에 노멀맵 텍스처를 사용해서 디테일을 표현할 필요가 없습니다.

이렇게 수동으로 노멀맵을 굽고 LOD를 적용하기 위해 작업하는 등의 최적화를 위한 수동 작업을 배제함으로써 실제로 게임에 들어가는 아트 작업에만 집중할 수 있게 되는 겁니다.

아주 간단하게 설명한 나나이트 가상화 지오메트리의 기본 원리는 이렇습니다.

물론 더 많은 내용들이 존재하지만 나나이트의 전체적인 내용을 다루려면 굉장한 분량의 영상이 되버릴 것이기 때문에 기본 원리에 대한 설명은 여기서 마치도록 하겠습니다.

나나이트 제약

그리고 나나이트의 제약에 대해서 짧게 설명하겠습니다.

현재 나나이트는 스태틱 메시에만 적용이 가능하며 스켈레탈 애니메이션이나, 모프타깃, 머티리얼을 통한 월드 포지션 오프셋 등 메시가 변형되는 경우에는 나나이트가 지원되지 않습니다.

나나이트 메시 임포트

그럼 이제 언리얼 엔진 5에서 나나이트 가상화 지오메트리를 사용하는 방법을 알아보겠습니다.

먼저 언리얼 프로젝트를 하나 실행합니다.

프로젝트가 열리고 나면 콘텐츠 브라우저에 우클릭하고 [퀵셀 콘텐츠 추가] 버튼을 눌러서 브릿지 창을 열고 몇 가지 3D 모델을 다운로드 받고 프로젝트에 임포트합니다.

각 퀄리티 별로 하나씩 다운로드 받아 임포트하겠습니다.

임포트가 끝나고 나면 다운로드 받은 모델들을 레벨에 배치해봅시다.

그리고 뷰 모드를 와이어 프레임으로 바꾸면 퀄리티에 따라서 다른 수의 폴리곤으로 표현되는 모습을 볼 수 있는데 그 중에서도 나나이트 메시는 차원이 다르게 많은 폴리곤 수를 가지고 있습니다.

나나이트 시각화

이제 임포트한 메시에 나나이트가 제대로 적용되고 있는지 보기 위해서 나나이트 시각화 기능을 사용해 보겠습니다.

뷰 모드를 [나나이트 시각화 > 개요]로 설정하면 렌더된 화면과 함께 자주 사용되는 나나이트 시각화 화면들이 한꺼번에 보이게 됩니다.

그 중에서 [나나이트 시각화 > 마스크]로 변경하면 현재 나나이트 오브젝트와 비나나이트 오브젝트를 구분해서 볼 수 있습니다.

초록색으로 표시되는 오브젝트가 바로 나나이트가 적용되고 있는 오브젝트입니다.

그 다음에 [나나이트 시각화 > 트라이앵글]로 뷰 모드를 변경하면 나나이트 메시의 트라이앵글이 어떻게 표시되고 있는지 볼 수 있습니다.

특히 트라이앵글 상태에서 물체와의 거리가 바뀌면 트라이앵글의 형태가 바뀌며 LOD가 자동으로 적용되는 모습을 볼 수 있습니다.

[나나이트 시각화 > 클러스터]로 뷰 모드를 변경하면 트라이앵글 뷰 모드와 비슷하지만 좀 더 큰 덩어리로 합쳐진 것을 볼 수 있습니다.

앞에서 말한 것처럼 일정한 갯수의 트라이앵글을 하나의 클러스터로 묶어서 처리하고 있는 겁니다.

그리고 클러스터 역시 더 큰 클러스터로 묶어서 트리 형태로 처리하고 거리에 따라서 어느 수준의 클러스터가 보여야 할지 자동으로 처리합니다.

그 다음으로는 [나나이트 시각화 > 오버드로] 뷰 모드입니다.

잠시 뷰 모드를 원상태로 되돌린 다음 오브젝트를 복사해서 겹쳐보겠습니다.

그리고 뷰 모드를 오버드로로 변경하면 하나만 있는 오브젝트는 오버드로가 거의 없지만 겹쳐둔 오브젝트는 오버드로가 발생하면서 밝은 색으로 표시되는 것을 볼 수 있습니다.

앞에서 이야기한 것처럼 이런 식으로 표면 가까이 겹쳐서 그려지는 오버드로가 너무 많으면 성능 저하가 발생할 수 있습니다.

너무 많이 겹쳐서 아주 밝은 색으로 보인다면 퍼포먼스를 위해 개선해야할 필요가 있습니다.

나나이트 활성화

이번에는 나나이트가 활성화되지 않은 스태틱 메시에 나나이트 설정을 활성화하는 방법을 알아보겠습니다.

나나이트 퀄리티가 아닌 메시를 더블 클릭해서 에디터를 엽니다.

에디터가 열리고 나면 디테일 패널에서 나나이트 지원 활성화 프로퍼티를 체크하고 변경사항을 적용해줍니다.

그리고 에셋을 저장하고 나나이트 시각화로 보면 나나이트가 잘 적용된 것을 볼 수 있습니다.

참고로 언리얼 개발자들의 이야기에서 과연 로우 폴리로 만들어진 스태틱 메시도 나나이트로 전환해야하는가에 대한 질문이 있었습니다.

그 답변으로는 모든 걸 나나이트로 만드는게 중요한건 아니며 사용할지 말지는 선택사항이지만 가급적이면 바꾸는걸 권장한다는 것이었습니다.

아웃트로

이번 영상에서는 나나이트 가상화 지오메트리 시스템의 기본적인 내용에 대해서 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 언리얼 엔진 5에서 입력을 받는 방법을 알아보도록 합시다!

 

사용 엔진 버전 : 5.0.2

 

타임라인

0:00 인트로

0:09 입력

0:25 액션 입력과 축 입력

0:48 매핑과 바인딩

1:14 입력 매핑 만들기

2:23 기능 구현과 바인딩

6:26 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번 영상에서는 언리얼 엔진에서 입력을 받는 방법을 알아보도록 하겠습니다.

입력

게임은 입력 장치를 통해서 플레이어의 입력을 받아 게임과 상호작용을 하고 게임의 반응을 출력 장치로 돌려주는 것을 기본적인 로직으로 합니다.

그렇기 때문에 언리얼 엔진으로 게임을 만들기 위해서는 사용자로부터 기본적인 입력을 받도록 기능을 구현하는 방법을 알아야 합니다.

액션 입력과 축 입력

언리얼 엔진에서는 입력을 크게 두 가지로 구분합니다.

바로 액션 입력과 축 입력입니다.

먼저 액션 입력은 점프나 공격, 상호작용을 할 때처럼 마우스 버튼이나 스페이스 바, E키를 누르는 것 처럼 간단하게 눌렀다가 떼는 입력을 의미합니다.

그리고 축 입력은 이동이나 마우스 좌표처럼 연속적인 값을 가지는 입력을 의미합니다.

매핑과 바인딩

언리얼 엔진에서 입력을 받기 위해서는 먼저 축이나 액션을 추가하고 그 입력이 어떤 입력인지 이름을 정합니다.

그리고 그 이름으로 동작할 키 입력을 추가해 주는데 이 과정을 매핑이라고 부릅니다.

그 다음에는 클래스에서 입력을 받아서 동작할 함수를 구현하고 이 함수와 입력 매핑을 연결해줍니다.

이 과정을 바인딩이라고 합니다.

한 마디로 언리얼 엔진에서 입력을 받기 위해서는 매핑과 바인딩이라는 과정을 거쳐야 합니다.

입력 매핑 만들기

먼저 언리얼 엔진을 실행하고 C++ 타입으로 시작용 콘텐츠를 포함해서 프로젝트를 생성합니다.

그럼 이제 앞에서 말한 과정대로 입력을 구현해보도록 하겠습니다.

먼저 매핑을 추가해야 합니다.

상단 메뉴바에서 [편집 > 프로젝트 세팅] 항목을 선택해서 프로젝트 세팅 창을 엽니다.

그리고 엔진 섹션에서 입력을 선택합니다.

그리고 바인딩 섹션을 보면 액션 매핑과 축 매핑 항목을 볼 수 있습니다.

여기서 축 매핑에 MoveForward라은 이름의 매핑을 추가하고 W키와 S키를 넣어줍니다.

그리고 W 키가 앞으로 가는 것이라면 S 키는 뒤로 가는 것이기 때문에 스케일을 -1로 설정합니다.

그 다음에는 MoveRight를 추가하고 A키와 D키를 매핑한 다음 A의 스케일을 -1로 설정합니다.

마지막으로 액션 매핑에 Grow를 추가하고 스페이스 바를 매핑해줍니다.

기능 구현과 바인딩

매핑을 추가한 다음에는 기능을 구현하고 만든 기능과 입력 매핑을 바인딩해야 합니다.

프로젝트 세팅 창을 닫고 [툴 > 새로운 C++ 클래스] 항목을 선택해서 C++ 클래스 추가 창을 띄워줍니다.

부모 클래스로는 폰을 선택하고 클래스를 생성합니다.

폰은 언리얼 엔진에서 AI나 플레이어가 조작할 수 있는 오브젝트를 의미합니다.

클래스 생성이 끝나면 헤더 파일에서 MoveForward, MoveRight, StartGrowing, StopGrowing 함수를 추가합니다.

그리고 멤버 변수로는 FVector 타입의 CurrentVelocity와 bool 타입의 bGrowing, USceneComponent* 타입의 OurVisibleComponent를 선언해줍니다.

OurVisibleComponent는 어디서든지 수정할 수 있게 EditAnywhere 지정자를 넣어서 UPROPERTY 매크로를 붙여줍니다.

그 다음엔 소스 파일의 생성자에서 루트 컴포넌트와 OurVisibleComponent에 씬 컴포넌트를 생성해서 넣어주고 OurSceneComponent를 RootComponent에 붙여줍니다.

그리고 MoveForward 함수와 MoveRight 함수를 구현해 줍니다.

이 두 함수는 입력받은 값을 CurrentVelocity에 넣어서 이동 방향 벡터를 만들도록 코드를 구현합니다.

그 다음에는 StartGrowing 함수와 StopGrowing 함수를 구현하고 bGrowing 변수의 값을 바꾸도록 코드를 작성합니다.

여기까지 기능 구현을 마쳤고 이제 이 기능과 입력 매핑을 바인딩할 차례입니다. SetupPlayerInputComponent 함수로 이동합니다.

축 매핑을 바인딩하기 위해서는 InputComponent의 BindAxis 함수를 사용합니다.

액션 매핑은 BindAction 함수를 사용하면 됩니다.

액션 매핑 바인딩에는 InputEvent를 통해서 어떤 입력일 때 기능이 동작할 지를 결정할 수 있습니다.

누를 때, 뗄 때, 두 번 누를 때 등 다양한 조건을 설정할 수 있습니다.

키를 누를 때는 StartGrowing 함수를 호출하게 만들고 키를 뗄 때는 StopGrowing 함수를 호출하게 바인딩합니다.

그 다음에는 Tick 함수로 가서 bGrowing 변수의 상태에 따라서 액터의 크기를 바꾸고 CurrentVelocity 변수로 액터의 위치를 이동시키는 코드를 작성해줍니다.

모든 코드를 작성한 다음에는 저장하고 에디터로 돌아가서 [Ctrl + Alt + F11] 단축키를 눌러서 컴파일시켜 줍니다.

그 다음에는 콘텐츠 브라우저에서 MyPawn 클래스를 찾아서 우클릭하고 [MyPawn 기반 블루프린트 클래스 생성] 항목을 선택해서 블루프린트를 생성합니다.

블루프린트가 생성되서 블루프린트 에디터가 열리면 컴포넌트 패널에서 Our Visible Component를 선택하고 [추가] 버튼을 눌러서 그 아래에 스피어를 추가해줍니다.

그리고 루트 컴포넌트 아래에는 카메라를 추가하고 위치를 조정해줍니다.

블루프린트 수정이 끝나면 블루프린트를 컴파일하고 저장한 다음 블루프린트 에디터를 닫아줍니다.

그 다음에는 우리가 만든 폰을 게임에서 사용하도록 만들 차례입니다.

GameModeBase 클래스를 찾아서 우클릭하고 다시 블루프린트 클래스를 생성해줍니다.

블루프린트 에디터가 열리고 나면 디폴트 폰 클래스를 우리가 만든 BP_MyPawn으로 변경해줍니다.

그리고 블루프린트를 컴파일하고 저장한 다음 블루프린트 에디터를 닫아줍니다.

그 다음에는 메인 툴바의 오른쪽 끝에 있는 설정 버튼을 누르고 월드 세팅을 눌러서 월드 세팅 패널을 열어줍니다.

그리고 여기서 게임 모드를 우리가 만든 것으로 교체해줍니다.

모든 작업이 끝나고 게임을 플레이시켜서 테스트해보면 이동 키로 구체가 움직이고 스페이스 키를 눌렀다가 뗄 때 크기가 커지고 작아지는 모습을 볼 수 있습니다.

아웃트로

이번 영상에서는 언리얼 엔진에서 플레이어의 입력을 받는 방법을 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 언리얼 엔진의 가장 기초가 되는 액터와 컴포넌트에 대해서 알아봅시다.

 

사용 엔진 버전 : 5.0.2

 

타임라인

0:00 인트로

0:18 액터

2:21 컴포넌트

3:44 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 언리얼 엔진에서 가장 기본이 되는 액터와 컴포넌트에 대해서 알아보도록 하겠습니다.

본격적인 설명에 들어가기 전에 언리얼 엔진을 실행하고 시작용 콘텐츠를 포함한 상태로 새 프로젝트를 하나 생성합니다.

액터

먼저 액터에 대해서 알아보자면, 아주 간단하게 설명해서 레벨에 배치할 수 있는 오브젝트를 말합니다.

우리가 방금 새로 생성한 언리얼 프로젝트에서 보면 기본 레벨에 있는 모든 것이 액터입니다.

의자나 테이블, 바닥은 물론 눈에 직접 보이지는 않지만 환경에 영향을 미치는 광원이나, 배경 소리를 구성하는 음원 등 여기 아웃라이너 패널에서 보이는 모든 것들은 액터라는 뜻입니다.

그럼 먼저 이 액터를 생성하는 방법을 간단하게 알아보겠습니다.

메인 툴바에서 육면체에 +모양이 표시된 액터 추가 버튼을 누르면 여러가지 항목을 볼 수 있습니다.

만들 수 있는 액터의 종류에 따라 분류가 되어있는데 먼저 기본 카테고리에서는 일반적으로 자주 사용되는 몇 가지 액터들을 생성할 수 있습니다.

일단 기본 카테고리에서 액터를 선택하면 완전히 비어있고 아무런 기능도 하지 않는 빈 액터를 생성할 수 있습니다.

비어있는 액터에는 기본적으로 씬 컴포넌트가 루트 컴포넌트로 붙어있고 이 루트 컴포넌트가 액터의 기본적인 위치나 회전, 크기와 같은 정보를 담고 있습니다.

그래서 이 액터가 레벨의 어디에 어떻게 배치되어있는지 확인할 수 있습니다.

라이트 카테고리에서는 씬에서 여러 액터들에게 빛을 비춰서 눈에 보이게 만들어줄 빛을 추가할 수 있습니다.

아웃라이너에서 라이트들을 끄면 레벨에 배치된 의자와 탁자들은 검게 어두워지면서 제대로 보이지 않게 되는 것을 볼 수 있습니다.

여기에 라이트 카테고리에서 포인트 라이트를 선택해서 레벨에 추가하고 테이블 위에 배치하면 어두워서 보이지 않던 주위가 보이게 됩니다.

이 외에도 셰이프 카테고리에서는 기본적인 육면체나 원뿔, 실린더, 구체 등의 액터를 추가할 수 있고, 카테고리마다 여러가지 다양한 기능을 가진 액터들을 생성할 수 있는 항목들을 가지고 있습니다.

각 카테고리에서 제공되는 액터들은 해당 기능에 대해서 알아보는 강좌에서 알아보도록 하겠습니다.

모든 클래스 카테고리에서는 언리얼 엔진에서 제공되는 모든 종류의 액터를 볼 수 있습니다.

물론 이렇게 계속 메인 툴바의 액터 배치 버튼을 눌러서 작업하기가 귀찮다면 액터 배치 패널을 열고 여기서 원하는 액터를 찾아서 배치하는 방법도 있습니다.

컴포넌트

앞에서 액터에 대해서 설명했으니 이제 그 액터에 부착되는 컴포넌트에 대해서 설명하겠습니다

사실 액터는 컴포넌트들을 담는 하나의 그릇이고 이 액터에 어떤 컴포넌트가 부착되느냐에 따라서 그 역할이 결정됩니다.

예를 들어 우리가 앞에서 만든 빈 액터는 루트 컴포넌트, 즉 액터의 가장 기본이 되는 컴포넌트에 씬 컴포넌트만 붙어있어서 아무런 기능을 하지 못하고 액터의 위치만 표현할 수 있습니다.

하지만 씬에 배치된 의자 액터의 경우에는 루트 컴포넌트에 스태틱 메시 컴포넌트라는 컴포넌트가 붙어있어서 3D 모델을 가지고 눈에 직접 보이는 형태로 렌더링됩니다.

우리가 배치한 포인트 라이트 액터 역시 라이트 컴포넌트가 붙어있어서 빛을 방출하고 주변을 보이도록 만들어 줍니다.

빈 액터 역시 디테일 패널에서 추가 버튼을 누르고 카메라 컴포넌트를 추가해주면 빈 액터가 아닌 카메라로서의 기능을 하게 됩니다.

앞에서도 말했다시피 액터에 어떤 컴포넌트를 붙이느냐 에 따라서 액터의 기능이 결정되는 것입니다.

언리얼 엔진에서는 게임 개발에 필요한 기능을 가진 굉장히 다양한 종류의 컴포넌트들을 제공합니다.

하지만 이 중에 여러분이 개발하고자 하는 게임의 기능을 지원하는 컴포넌트가 없을 수도 있습니다.

그럴 때는 C++나 블루프린트를 이용해 여러분 만의 커스텀 컴포넌트를 만들어서 액터에 붙이면 됩니다.

이런 커스텀 컴포넌트 제작 방법 역시 추후에 강좌의 진행에 따라서 하나씩 배워보도록 할겁니다.

아웃트로

이번에는 언리얼 엔진의 가장 기본이 되는 액터와 컴포넌트에 대해서 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 언리얼 C++에서 만든 함수를 블루프린트에서 호출할 수 있게 만드는 방법을 알아봅시다!

 

사용 엔진 버전 : 5.0.2

 

타임라인

0:00 인트로

0:10 프로젝트 및 클래스 생성

0:47 함수 복습

1:35 함수를 블루프린트에서 호출할 수 있게 만들기

2:53 C++ 클래스 기반으로 블루프린트 클래스 만들기

4:09 함수를 블루프린트에서 호출하기

5:15 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 C++ 클래스에서 만든 함수를 블루프린트에서 호출하는 방법을 알아보도록 하겠습니다.

프로젝트 생성 및 클래스 생성

그럼 이제 언리얼 엔진에서 함수를 만들어보기 위해서 언리얼 엔진을 실행하고 새 프로젝트를 생성합니다.

카테고리는 게임으로 하고, 다른 코드 없이 완전히 비어있는 기본 템플릿을 선택하겠습니다.

그리고 프로젝트 타입을 C++로 변경한 다음 프로젝트를 생성합니다.

프로젝트가 생성되면 Actor 클래스를 상속받아서 C++ 클래스를 하나 생성합니다.

클래스의 이름은 언리얼 엔진이 기본으로 추천해주는 MyActor를 그대로 쓰도록 하겠습니다.

함수 복습

클래스가 생성되고 나면 먼저 MyActor의 헤더 파일로 이동해서 저번 영상의 복습으로 간단한 함수를 만들어 보겠습니다.

일단 bool 타입으로 키가 눌렸음을 알리는 bPressedKey 변수를 선언합니다.

그리고 InputSpaceKey 함수와 MoveUp 함수를 선언합니다.

그 다음에는 소스 파일로 이동해서 함수를 구현해줍니다.

먼저 InputSpaceKey 함수에서는 매개변수를 가져와서 bPressedKey를 설정해줍니다.

그리고 MoveUp 함수에서는 키가 눌려서 bPressedKey 변수가 true가 되었을 때 액터의 위치 값을 가져와서 상승시키도록 계산한 뒤에 다시 액터의 위치로 설정하도록 코드를 작성합니다.

함수를 블루프린트에서 호출할 수 있게 만들기

함수를 완성한 다음에는 이 함수들을 블루프린트에서 호출해서 사용할 계획입니다.

다만 이렇게 그냥 만들어진 함수들은 기본적으로 블루프린트에서 호출하려고 해도 컨텍스트 메뉴에는 보이지 않습니다.

그럼 이제 C++ 클래스에서 직접 만든 함수들을 블루프린트 클래스에서 호출할 수 있도록 만들어 보겠습니다.

언리얼 C++ 변수 영상에서 프로퍼티를 언리얼 에디터에서 볼 수 있게 하기 위해서 UPROPERTY 매크로를 사용한 것을 기억할 겁니다.

그와 대응되는 기능으로 함수에서는 UFUNCTION 매크로를 사용하면 함수를 블루프린트에서 사용할 수 있게 설정하는 등의 기능을 지정자로 넣을 수 있습니다.

함수들에 UFUNCTION 매크로를 추가해주고 지정자는 BlueprintCallable과 Category="Move"로 입력하겠습니다.

UFUNCTION 매크로에서 BlueprintCallable 지정자를 넣어주면 해당 함수를 블루프린트에서 사용할 수 있게 됩니다.

그리고 블루프린트에서 사용할 모든 함수에는 카테고리를 할당해줘야만 정상적으로 호출 할 수 있게 됩니다.

그렇기 때문에 함수를 블루프린트에서 사용하려면 UFUNCTION 매크로에 반드시 카테고리 지정자를 넣어줘야 합니다.

UFUNCTION 매크로를 모두 작성하면 저장하고 언리얼 에디터로 돌아가서 명령 콘솔 창에 LiveCoding.Complie을 입력해서 수정 사항을 컴파일 해줍니다.

C++ 클래스 기반으로 블루프린트 클래스 만들기

그 다음에는 만든 함수가 블루프린트에 잘 호출되는지 확인하기 위해서 MyActor 클래스를 기반으로 블루프린트 클래스를 만들어야 합니다.

콘텐츠 브라우저에서 MyActor C++ 클래스 에셋을 우클릭하고 [MyActor 기반 블루프린트 클래스 생성]을 선택하면 블루프린트 클래스 추가 창이 뜹니다.

블루프린트 클래스의 이름을 BP_MyActor로 입력한 다음 블루프린트 클래스 생성 버튼을 누릅니다.

블루프린트 클래스가 생성되고 나면 생성된 블루프린트 클래스를 대상으로 블루프린트 에디터가 열립니다.

그 다음에는 이 액터가 키 입력을 받아서 움직이는 것을 잘 보이게 만들기 위해서 컴포넌트 패널의 [추가] 버튼을 누르고 Sphere 컴포넌트를 찾아서 추가해줍니다.

그리고 추가된 Sphere 컴포넌트를 DefaultSceneRoot에 드래그&드롭해서 루트 컴포넌트로 만들어 줍니다.

그리고 Sphere 컴포넌트를 선택하고 디테일 패널의 피직스 카테고리에서 피직스 시뮬레이트에 체크해줍니다.

블루프린트 세팅의 마지막 과정으로는 이 액터가 입력을 받을 수 있도록 설정할 차례입니다.

블루프린트 에디터에서 이벤트 그래프 패널로 이동합니다.

그 다음에는 Begin play 이벤트 근처의 그래프 빈 영역에 우클릭하고 컨텍스트 메뉴에서 Get Player Controller와 Enable Input 함수를 찾아서 노드를 배치해줍니다.

그리고 Begin Play 이벤트 노드와 연결해줍니다.

이렇게 하면 이 액터가 입력을 받을 수 있도록 설정됩니다.

함수를 블루프린트에서 호출하기

기본 세팅을 끝냈으니 이제 앞에서 만든 함수들을 블루프린트에서 호출해볼 차례입니다.

그래프의 빈 영역에 우클릭하고 컨텍스트 메뉴에서 스페이스 바 이벤트를 찾아서 추가해줍니다.

그 다음에 다시 빈 영역에 우클릭하고 컨텍스트 메뉴를 살펴보면 Move 카테고리에 우리가 만든 함수를 찾을 수 있습니다.

먼저 InputSpaceKey 함수 노드를 두 개 추가하고 각각 Pressed 핀과 Released 핀에 연결해줍니다.

그리고 Pressed 핀에 연결된 노드에는 Pressed가 true가 되게 체크해줍니다.

그 다음에는 MoveUp 함수 노드를 추가하고 틱 이벤트와 연결해줍니다.

블루프린트 작성이 모두 끝난 다음에는 블루프린트 에디터의 컴파일 버튼과 저장 버튼을 차례대로 누른 뒤 블루프린트 에디터를 닫아줍니다.

그 다음에는 테스트를 위해서 BP_MyActor를 레벨에 배치하고 게임을 플레이시켜줍니다.

이제 스페이스 바를 누르면 액터가 떠오르고 손을 떼면 다시 중력의 영향을 받아 떨어지는 모습을 볼 수 있습니다.

이런 방식으로 프로그래머가 블루프린트에서 호출할 수 있게 핵심 기능을 가진 함수를 만들면 디자이너는 블루프린트에서 함수를 조합해서 게임 기능을 만들면 됩니다.

아웃트로

이번 영상에서는 C++에서 만든 함수를 블루프린트에서 호출하는 방법에 대해서 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요!

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 프로그래밍의 함수에 대해서 알아보고 언리얼 프로그래밍에서 함수를 만들고 사용하는 방법을 배워봅시다.

 

사용 엔진 버전 : 5.0.1

 

타임라인

0:00 인트로

0:12 함수란?

2:05 프로젝트 및 클래스 생성

2:39 변수 선언

3:36 함수 선언 및 구현

4:29 함수 만들어보기

5:15 함수 호출하기

7:52 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번 영상에서는 함수의 기본적인 내용과 함께 언리얼 프로그래밍에서 함수를 만들고 호출하는 방법을 알아보도록 합시다.

함수란?

프로그래밍에서 함수는 일정한 동작을 수행하는 코드들을 묶어놓은 것을 이야기하며 이 함수는 반환형, 이름, 매개변수, 몸체를 가집니다.

차례대로 살펴보자면 먼저 반환형은 이 함수가 모든 과정을 수행하고 나서 어떤 타입의 결과값을 돌려주는지 알려주는 부분입니다.

반환형이 int로 되어있다면 이 함수가 모든 동작을 끝내고나서 돌려줄 결과 값의 타입이 정수형이라는 뜻입니다.

언리얼 프로그래밍에서 사용되는 모든 자료형은 반환형으로 사용할 수 있습니다.

또한 함수가 동작을 끝내고 나서 결과값을 돌려줄 필요가 없다면 void라는 타입으로 결과값을 돌려주지 않을 것임을 알려줄 수도 있습니다.

그리고 함수 이름은 이 함수를 호출하는데 사용되는 것으로 개발자가 원하는 대로 이름을 지어주면 됩니다.

다만 함수의 이름을 지을 때는 이 함수가 어떤 작업을 하는 함수인지 이름만 보고도 알 수 있게 하는 것이 좋습니다.

매개변수 부분은 괄호로 묶여있는데 이 부분을 통해서 함수가 동작하는데 필요한 변수를 함수 외부에서 받아와서 함수 내부에서 사용할 수 있게 됩니다.

이렇게 매개변수 괄호가 비어있을 때는 함수에 필요한 외부 변수가 없다는 뜻이 됩니다.

외부에서 변수를 받아와서 사용할 필요가 있을 때는 이렇게 매개변수의 타입과 이름을 넣어주면 됩니다.

만약 여러 개의 매개변수가 필요하다면 끝에 쉼표를 찍고 다음 매개변수의 타입과 이름을 적어주면 됩니다.

마지막으로 함수의 몸체는 이 함수가 실제로 해야할 일을 처리하는 코드를 작성하는 부분입니다.

예를 들어 캐릭터를 원하는 위치로 이동시키는 함수를 구현한다고 가정하면 반환형으로는 남은 거리를 돌려주기 위해서 float으로 하고 함수 이름은 Move로 정하게 될겁니다.

그리고 매개변수는 목적지의 좌표를 받게 되겠죠.

그 다음 함수의 몸체에서는 함수가 호출될 때마다 목적지를 향해서 캐릭터의 이동속도와 시간을 이용해서 조금씩 이동시키고 남은 거리를 반환하는 코드를 작성하게 될 겁니다.

이렇게 프로그래밍에서 함수는 어떠한 작업을 하나의 묶음으로 만들어서 필요할 때마다 재사용할 수 있게 되는데, 작업 효율을 위해서는 필요한 기능 별로 함수를 잘 만들어서 사용해야 합니다.

프로젝트 생성 및 클래스 생성

그럼 이제 언리얼 엔진에서 함수를 만들어보기 위해서 언리얼 엔진을 실행하고 새 프로젝트를 생성합니다.

카테고리는 게임으로 하고, 다른 코드 없이 완전히 비어있는 기본 템플릿을 선택하겠습니다.

그리고 프로젝트 타입을 C++로 변경한 다음 프로젝트를 생성합니다.

프로젝트가 생성되면 지난 영상인 언리얼 프로그래밍 입문 1편에서 배운 것처럼 Actor 클래스를 상속받아서 C++ 클래스를 하나 생성합니다.

클래스의 이름은 언리얼 엔진이 기본으로 추천해주는 MyActor를 그대로 쓰도록 하겠습니다.

변수 선언

클래스 생성이 끝나고 나면 헤더 파일로 가서 몇 가지 변수를 선언해주겠습니다.

int32 타입으로 TotalDamage를 선언하고 UPROPERTY 매크로를 붙여준 뒤 지정자로 EditAnywhere, BlueprintReadWrite, Category=”Damage”를 넣어줍니다.

그리고 float 타입으로 DamageTimeInSeconds와 DamagePerSecond 변수를 선언하고 UPROPERTY 매크로 붙여주되 DamageTimeInSeconds에는 TotalDamage 변수와 같은 지정자를 넣어주고 DamagePerSecond에는 지정자로 BlueprintReadOnly, VisibleAnywhere, Transient, Category="Damage”를 넣어줍니다.

그리고 생성자 함수로 가서 간단하게 변수들의 기본값을 지정해줍니다.

하지만 이중에서 DamagePerSecond 프로퍼티는 기본값을 넣지 않고 그냥 놔두겠습니다.

함수 선언 및 구현

그 다음 클래스에 함수를 만들기 위해서는 두 단계의 과정을 거쳐야 합니다.

바로 함수 선언과 구현입니다.

자세하게 설명해보자면 우선 헤더 파일에서 이 클래스에 새로 생성할 함수의 원래 형태, 즉 원형을 적어서 알려야 합니다.

이것을 함수의 선언이라고 합니다.

다시 말해서 함수 원형 선언은 이 클래스에 이런 함수가 있음을 알리는 것으로 함수의 반환형, 이름, 매개변수까지만 적고 세미콜론을 찍어주면 됩니다.

그리고 소스 파일로 가서 함수를 구현해야 합니다.

함수를 구현할 때는 반환형과 이 함수를 소유하고 있는 클래스의 이름을 적은 뒤 콜론을 두 개 찍어주고 함수 이름을 적습니다.

그리고 매개변수를 적은 뒤 중괄호를 열어서 함수의 몸체를 만들고 이 몸체 안에 실제 함수가 동작할 코드를 작성해야 합니다.

함수 만들어보기

그럼 이제 간단한 함수를 만들어 봅시다.

우선 앞에서 변수들에 기본 값을 넣어주면서 DamagePerSecond는 제외한 것을 기억할 겁니다.

TotalDamage 변수와 DamageTimeInSeconds 변수를 이용해서 이 DamagePerSecond 변수의 값을 바꿔주는 함수를 만들어 보겠습니다.

헤더 파일에서 CalculateDPS라는 이름으로 함수의 원형을 선언합니다.

함수의 원형을 완성하고 나면 소스 파일로 이동해서 함수를 실제로 구현해야 합니다.

소스 파일에서는 앞에서 한 번 이야기한 것처럼 반환형, 클래스 이름, 함수 이름, 괄호와 매개변수를 입력하고 중괄호로 함수의 몸체를 만들어주면 됩니다.

함수의 내용에는 TotalDamage를 DamageTimeInSeconds로 나눠서 DamagePerSecond 변수에 넣어주도록 코드를 작성합니다.

함수 호출하기

이렇게 함수를 작성하고 나면 이 함수가 특정한 시점에 자동으로 호출되게 해주겠습니다.

그 시점으로 알맞은 것은 TotalDamage나 DamageTimeInSeconds와 같은 변수가 초기화되거나 변경될 때 일 겁니다.

언리얼 엔진에서 오브젝트의 변수가 초기화될 때 호출되는 함수는 PostInitProperties이고 변수가 수정될 때 호출되는 함수는 PostEditChangeProperty입니다.

AMyActor의 헤더 파일로 가서 두 함수의 원형을 작성합니다.

이 두 함수는 AMyActor의 부모 클래스인 AActor에서 상속받는 함수이기 때문에 부모 클래스의 함수를 자식 클래스인 AMyActor에서 덮어쓴다는 의미로 virtual 키워드와 override 키워드를 사용해줘야 합니다.

이렇게 두 함수의 원형을 선언하고 나면 다시 소스 파일로 가서 함수를 구현해야 하는데 아까 전의 CalculateDPS 함수처럼 직접 작성할 수도 있지만, 초록색 밑줄이 그어진 함수 이름에 커서를 두고 [Ctrl + .] 단축키를 누르고 [PostInitProperties에서 'AMyActor.cpp' 정의 만들기]를 선택하면 빈 함수의 구현을 스크립트 에디터가 자동으로 해줍니다.

PostInitProperties 함수의 내용은 간단하게 Super::PostInitProperties 함수를 호출한 다음에 CalculateDPS 함수를 호출하게 만들어 줍니다.

참고로 언리얼 C++에서 Super 키워드는 클래스가 상속받은 부모 클래스에 있는 원본 프로퍼티나 함수를 가져오는데 사용되는 키워드입니다.

AMyActor에 override로 선언한 PostInitProperties 함수는 부모 클래스인 AActor 클래스의 PostInitProperties를 덮어씌워서 만든 것이기 때문에 이렇게 AMyActor에서 만든 PostInitProperties 함수에서 부모 클래스의 PostInitProperties를 다시 호출해주지 않으면 부모 클래스의 PostInitProperties에서 실제로 처리하는 작업이 실행되지 않아서 문제가 발생할 수도 있습니다.

그래서 이렇게 부모 클래스의 함수를 덮어씌워서 만드는 경우에는 Super 키워드를 이용해서 부모 클래스의 원본 함수를 한 번 실행시켜주는 것이 좋습니다.

PostInitProperties 함수를 모두 작성하고 나면 PostEditChangeProperty 함수도 역시 똑같이 작성해줍니다.

다만 PostEditChangeProperty 함수에서는 원본 PostEditChangeProperty 함수보다 CalculateDPS 함수를 먼저 호출해주도록 작성하겠습니다.

코드를 모두 작성하면 변경사항을 저장하고 에디터로 돌아가서 [Ctrl + Alt + F11] 단축키를 이용해 수정사항을 컴파일 해줍니다.

코드가 컴파일되고 나서 MyActor 클래스를 레벨에 배치해보면 디테일 패널에서 DamagePerSecond의 값이 계산되어 표시되는 것을 볼 수 있습니다.

그리고 TotalDamage 프로퍼티와 DamageTimeInSeconds 프로퍼티의 값을 변경하면 DamagePerSecond의 값도 곧바로 변경되는 것을 볼 수 있습니다.

아웃트로

이번 영상에서는 함수가 무엇인지 배우고 언리얼 프로그래밍에서 함수를 만들고 사용하는 방법을 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 언리얼 프로그래밍에 입문하기 위해 기본적인 내용과 C++ 클래스 생성 방법, 그리고 언리얼 액터의 가장 기본이 되는 이벤트에 대해서 알아보겠습니다.

 

사용 엔진 버전 : 5.0.1

 

타임라인

0:00 인트로

0:29 개요

1:37 언리얼 C++ 프로젝트 생성

2:35 C++ 클래스 생성

3:53 생성한 C++ 클래스 살펴보기

5:59 기본 이벤트 함수 호출 확인

7:59 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번 영상에서는 언리얼 엔진 5에서 프로그래밍 하는 방법에 대한 기초를 배워보겠습니다.

이번 영상의 내용은 전반적으로 지난 언리얼 엔진 4 프로그래밍 입문 영상과 대부분 같은 내용입니다.

그럼에도 언리얼 엔진 5 버전으로 다시 만드는 이유는 언리얼 엔진 5에 입문하는데 언리얼 엔진 4 강좌를 보면서 하기에는 세부적인 부분에서는 조금씩 달라진 부분이 있기 때문입니다.

그럼 이제 언리얼 엔진 5 프로그래밍을 배워보도록 하겠습니다.

개요

먼저 언리얼 엔진에서의 프로그래밍은 게임의 기능을 만드는 것을 의미합니다.

캐릭터가 어떻게 조작되어 움직이고, 어떤 규칙으로 목적을 달성해야 게임에서 승리하게 되는지 등 이런 전반적인 것을 프로그래밍 언어나 다른 여러 가지 방법으로 만드는 것입니다.

먼저 언리얼 엔진에서 게임 기능을 만드는 방법은 C++와 블루프린트, 이렇게 두 가지가 있습니다.

C++는 프로그래머가 직접 타이핑으로 코드를 작성해서 프로그래밍을 하는 방법이고, 블루프린트는 눈에 보이는 노드와 노드를 이어 기능의 흐름을 눈으로 보면서 만들어내는 비주얼 스크립팅입니다.

C++ 클래스로만 게임을 제작하거나 블루프린트 클래스만을 이용해서 게임을 제작하는 것도 충분히 가능하지만, 이 두 방법을 완전히 따로 사용하는 것보다는 프로그래머가 C++로 베이스가 되는 게임 기능을 만들고, 디자이너가 블루프린트를 이용해서 그 기본 게임 기능을 가지고 게임의 재미를 위한 기능들을 제작하는 방식으로 함께 사용할 때 시너지 효과를 발휘합니다.

앞으로 C++ 클래스와 블루프린트 클래스를 넘나들면서 언리얼 엔진에서 게임 기능을 만드는 방법을 배우게 될 겁니다.

참고로 언리얼 C++ 프로그래밍을 배우기 위해서는 먼저 C++나 다른 프로그래밍 언어를 어느 정도 익숙한 수준으로 다룰 줄 아는 편이 좋지만 이런 부분까지 포함해서 하나씩 배워나가 봅시다.

C++ 프로젝트 생성

그럼 제일 먼저 언리얼 엔진에서 C++ 프로젝트를 만드는 방법을 배워봅시다.

우선 언리얼 엔진을 실행하겠습니다.

그리고 새 프로젝트의 카테고리를 게임으로 선택합니다.

그 다음 템플릿에서는 여러 가지 게임 장르의 기반이 되는 다양한 템플릿을 볼 수 있는데 지금은 완전히 빈 프로젝트를 생성하는 기본 템플릿을 선택하겠습니다.

프로젝트 디폴트 세팅에서는 프로젝트 타입과 퀄리티, 타깃 플랫폼, 시작용 콘텐츠 포함 여부 등을 선택할 수 있는데 여기서 중요한 부분은 프로젝트 타입입니다.

기본으로 블루프린트가 선택되어 있는데 우리는 여기서 C++를 선택해야 합니다.

만약 여기서 블루프린트를 선택하고 프로젝트를 생성하면 해당 프로젝트에서는 C++ 클래스를 생성하지 못하고 블루프린트만을 이용해서 게임을 제작해야 합니다.

우리는 언리얼 C++ 프로그래밍을 배우면서 블루프린트를 함께 다룰 계획이기 때문에 C++를 선택하겠습니다.

그리고 프로젝트 이름을 입력하고 프로젝트를 생성합니다.

C++ 클래스 생성

프로젝트의 생성이 끝나고 나면 제일 먼저 C++ 클래스를 생성하는 방법을 배워보겠습니다.

새로운 C++ 클래스를 생성하는 방법은 여러 가지가 있습니다.

첫 번째 방법은 상단 메뉴 바에서 [툴 > 새로운 C++ 클래스] 항목을 선택하는 것이고 두 번째 방법은 콘텐츠 브라우저에서 C++ 클래스 폴더를 선택하고 추가 버튼을 누르거나 콘텐츠 브라우저의 빈 영역에 우클릭해서 새 C++ 클래스 항목을 선택하는 것입니다.

그렇게하면 추가할 클래스의 부모 클래스를 선택할 수 있는 창이 뜹니다.

여기서 부모 클래스를 선택하면 우리가 만드는 클래스는 선택한 부모 클래스의 변수와 함수를 상속받아 사용할 수 있게 됩니다.

언리얼 엔진에서 미리 구현해둔 여러 클래스들이 보이는데 일단 이중에서 Actor를 선택하도록 하겠습니다.

액터 클래스는 레벨에 배치할 수 있는 오브젝트를 의미합니다.

보통 레벨에 배치되어 동작할 오브젝트를 만들 때는 이 액터 클래스를 상속받아서 클래스를 구현하면 됩니다.

다음을 클릭하고 새 액터의 이름을 정한 뒤 클래스 생성 버튼을 클릭해주면 됩니다.

지금은 그냥 MyActor라는 이름 그대로 클래스를 생성하겠습니다.

생성한 C++ 클래스 살펴보기

C++ 클래스의 생성이 끝나고 나면 콘텐츠 브라우저의 소스 패널을 열고 [C++ 클래스 > (프로젝트 이름)]의 폴더를 열어보면 방금 생성한 MyActor 클래스가 보입니다.

그리고 이 MyActor 클래스를 스크립트 에디터에서 보면 MyActor 클래스에 대한 헤더 파일(.h)과 소스 파일(.cpp)이 생겨난 것을 확인할 수 있습니다.

이미 C++에 대해서 공부한 분들이라면 알고 있겠지만 모르는 분들을 위해서 설명하자면 헤더 파일은 클래스를 선언하고, 클래스에 속하는 변수와 함수의 원형을 선언하는 용도의 파일입니다.

헤더 파일의 클래스에서는 함수의 원래 형태만 알려주는 것이기 때문에 이렇게 함수의 내용은 없고 세미콜론으로 함수가 끝나는 것을 볼 수 있습니다.

이 함수의 몸체는 이렇게 소스 파일에서 구현됩니다.

처음 만들어진 액터 클래스에는 이렇게 클래스 이름과 같은 이름을 가진 생성자, BeginPlay 함수, Tick 함수가 생성되어 있습니다.

우선 클래스 이름과 같은 이름을 가진 생성자는 클래스의 객체가 생성될 때 한 번 호출되는 함수이며 주로 생성된 액터의 프로퍼티, 즉 변수의 기본 값을 설정해주는데 사용됩니다.

BeginPlay 함수는 액터가 배치된 월드에서 게임이 시작되거나 액터가 월드에 스폰되었을 때 한 번 호출되는 함수로 게임플레이 로직을 초기화시키는 데 사용됩니다.

그리고 Tick 함수는 매 프레임마다 한 번씩 호출되는 함수입니다.

이 Tick 함수에서는 매개변수인 DeltaTime을 통해서 Tick 함수가 지난 번에 호출된 이 후로 얼마의 시간이 경과한 뒤에 다시 Tick 함수가 호출되었는지에 대한 시간을 전달받을 수 있습니다.

그리고 이 Tick 함수는 Actor가 활성화되어 있는 동안 계속해서 호출되기 때문에 주로 게임의 로직을 처리하는 기능을 구현하는데 사용됩니다.

하지만 지금 만드는 클래스에 매 프레임 호출되는 Tick 함수가 필요하지 않다면 Tick 함수를 제거해서 게임의 퍼포먼스를 상승시킬 수도 있습니다.

Actor의 틱 함수를 비활성화하기 위해서는 헤더 파일과 소스 파일에서 Tick 함수를 제거하고 소스 파일의 생성자에서 PrimaryActorTick.bCanEverTick = true 코드를 제거해주면 됩니다.

이 코드는 이 Actor가 Tick 함수를 매 프레임 호출하도록 설정하는 코드입니다.

처음 생성한 C++ 클래스는 이렇게 생성자, BeginPlay 이벤트 함수, Tick 이벤트 함수를 가진 채로 생성됩니다.

이제 여기서 어떤 변수와 함수를 만들어 나가느냐에 따라서 클래스의 기능이 결정될 겁니다.

이벤트 함수 호출 확인

그럼 마지막으로 언리얼 C++ 클래스의 생성자와 기본 이벤트 함수들이 언제 호출되는지 확인해보기 위해서 간단한 로그를 남겨봅시다.

언리얼에서 로그를 남기기 위해서는 UE_LOG라는 매크로 함수를 사용합니다.

첫 번째 매개변수에는 LogTemp, 두 번째 매개변수에는 Log, 세 번째 매개변수에는 출력할 문자열을 넣어주면 됩니다.

생성자에서는 "Constructor"라는 문자열을 출력하게 만들고 BeginPlay 이벤트 함수에서는 "BeginPlay"를, Tick 이벤트 함수에서는 "Tick"이라는 문자열을 출력하게 코드를 작성합니다.

로그 출력 코드를 모두 작성하면 코드를 저장하고 변경한 코드의 내용이 언리얼 에디터에 적용될 수 있게 컴파일을 진행해야 합니다.

언리얼 엔진 4에서는 메인 툴바에 컴파일 버튼이 있었지만 언리얼 엔진 5부터는 컴파일 버튼이 사라지게 되었습니다.

언리얼 에디터를 종료하지 않고 컴파일 하기 위해서는 콘솔 명령창에서 LiveCoding.Compile 명령어를 입력하거나 [Ctrl + Alt + F11] 단축키를 눌러 라이브 코딩 기능을 사용해야 합니다.

라이브 코딩 기능으로 컴파일을 진행하면 이렇게 라이브 코딩 창이 뜨면서 진행상황을 알려줍니다.

가끔 컴파일 후에도 바로 변경사항이 적용되지 않을 때가 있는데 그럴 때는 언리얼 에디터를 종료하고 비주얼 스튜디오의 상단 메뉴 바에서 [Build > Rebuild Solution] 항목을 선택해서 프로젝트를 다시 빌드하고 실행하면 됩니다.

변경된 코드의 내용이 에디터에 적용되고 나면 출력되는 로그를 보기 위해서 하단 툴바의 출력 로그 버튼을 눌러 출력 로그 패널을 열고 [레이아웃에 고정] 버튼을 눌러 줍니다.

그 다음에는 MyActor 하나를 씬에 배치하고 게임을 플레이 시킵니다.

그러면 게임이 시작되자마자 빠르게 Tick로그가 출력되는 것을 볼 수 있는데 게임을 일시정지시키고 로그를 거슬러 올라가면 Play In Editor 모드가 초기화될 때 MyActor의 생성자가 실행되어서 Constructor 로그가 출력되고 PIE 모드가 시작되면서 BeginPlay 로그가 출력된 것을 볼 수 있습니다.

그리고 그 아래로는 매 프레임 Tick 로그가 출력된 것을 확인할 수 있습니다.

아웃트로

이렇게 이번 영상에서는 언리얼 엔진 5 C++ 프로그래밍에 입문하기 위한 대략적인 내용과 C++ 클래스를 생성하는 방법 그리고 C++ 클래스의 생성자와 언리얼 엔진의 기본 이벤트 함수인 BeginPlay와 Tick의 동작에 대해서 알아보았습니다.

이제 이 다음 영상에서는 C++ 클래스의 변수와 함수 등 좀 더 깊은 내용에 대해서 배우게 될 겁니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요!

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 프로토타입용 레벨을 빠르게 만드는 방법을 알아봅시다.

 

사용 엔진 버전 : 5.0.1

 

타임라인

0:00 인트로

0:14 프로젝트 생성

0:29 레벨 환경 세팅하기

2:16 큐브그리드로 프로토타입용 맵 만들기

4:37 퀵셀로 꾸미기

6:08 아웃트로

 

[참고자료]

https://dev.epicgames.com/community/learning/talks-and-demos/vyn9/unreal-engine-5-guided-tour

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 언리얼 엔진에서 빈 레벨을 생성하고 빠르게 환경을 세팅하는 방법과 큐브그리드 기능을 이용해서 빠른 프로토타입 레벨을 만드는 방법을 알아보도록 하겠습니다.

프로젝트 생성

본 작업에 들어가기 전에 프로젝트를 생성하겠습니다.

게임 카테고리에서 삼인칭 템플릿을 선택한 다음 프로젝트를 생성해줍니다.

레벨 환경 설정하기

처음으로 언리얼 엔진을 배울 때는 이렇게 템플릿에서 기본으로 생성해준 레벨을 이용해서 작업을 하게 됩니다.

하지만 기본으로 제공되는 레벨에는 이미 환경이 세팅되어 있어서 원하는데로 환경이 설정이 되지 않는 경우가 종종 있습니다.

그래서 자신만의 환경을 세팅하고자 할 때는 빈 레벨을 새로 만들어서 환경을 세팅하는 것이 좋습니다.

그럼 이제 빈 레벨을 만들어보겠습니다.

상단 메뉴 바에서 [파일 > 새 레벨] 항목을 선택하면 [새 레벨] 창이 뜹니다.

여기서 빈 레벨을 선택하고 생성 버튼을 누릅니다.

그러면 완전히 어둡고 비어있는 새로운 레벨이 생성됩니다.

여기에 기본적인 환경 세팅을 해주면 되는데 수동으로 작업을 진행해도 좋지만 환경에 필요한 액터들을 전부 일일이 배치하려면 꽤나 번거로울 겁니다.

그래서 언리얼에서는 몇 번의 클릭만으로도 레벨 환경을 세팅할 수 있는 기능을 제공하고 있습니다.

상단 메뉴바에서 [창 > 환경 라이트 믹서] 항목을 선택해서 환경 라이트 믹서 패널을 열어줍니다.

그리고 이 패널에 있는 버튼들을 순서대로 눌러주기만 하면 됩니다.

다만 여기서 애트머스피어 라이트 생성 버튼의 경우에는 0번만 클릭하고 1번은 생성하지 않겠습니다.

특별한 경우에만 여러 개의 애트머스피어 라이트를 사용합니다.

어떤 경우인지는 저도 좀 더 공부를 해봐야 할 것 같습니다.

여기서 스카이 라이트 생성, 애트머스피어 라이트 0 생성, 스카이 애트머스피어 생성, 볼류메트릭 클라우드 생성, 하이트 포그 생성 버튼을 차례대로 눌러주면 빈 레벨의 저편이 자연스러운 하늘로 바뀌는 모습을 볼 수 있습니다.

그리고 여기서 가벼운 팁을 하나 드리자면 [Ctrl + L] 단축키를 누르고 마우스를 움직이면 아주 빠르고 쉽게 레벨의 메인 라이트의 방향을 변경할 수 있습니다.

큐브그리드로 프로토타입용 맵 만들기

빈 레벨의 환경 세팅을 마쳤으니 이제 프로토타입용 맵을 빠르게 만들 수 있는 기능을 알아보겠습니다.

보통 프로토타입용 게임을 만들때는 레벨의 배경이나 구조물을 기본 큐브나 실린더, 스피어 형태의 액터들을 활용해서 만드는 경우가 많습니다.

하지만 그렇게 큐브나 실린더 같은 오브젝트를 일일이 배치하는 것보다 훨씬 좋은 방법이 있는데 바로 큐브그리드 기능을 사용하는 것입니다.

그럼 이제 큐브그리드 기능에 대해서 알아보겠습니다.

메인 툴바에서 모드를 모델링 모드로 바꿔줍니다.

그리고 모드 패널의 PolyModel 섹션에 CubeGr을 선택해줍니다.

이렇게 큐브그리드 모드를 선택하면 레벨에 그리드가 생겨납니다.

이 때 원하는 영역을 선택하고 E 키를 누르면 선택한 영역에 큐브가 한 칸 쌓이며 큐브 형태가 생겨납니다.

Q 키를 누르면 반대로 선택한 영역이 깎이며 파고 들어가게 됩니다.

조금 더 간단한 방법으로는 영역을 선택하고 Ctrl을 누른 상태로 드래그하면 큐브를 빠르게 쌓거나 깎을 수 있습니다.

그리고 [Ctrl + E] 단축키를 누르면 다루는 그리드의 크기를 좀 더 크게 할 수 있고, [Ctrl + Q] 단축키를 누르면 반대로 그리드 크기를 작게 만들 수 있습니다.

그 다음으로는 코너 모드를 선택하고 선택한 영역의 모서리를 선택한 다음 큐브를 올리거나 내리면 경사로를 만들 수도 있습니다.

원하는 레벨 형태를 다 완성한 다음에는 레벨 뷰포트 가운데에 있는 큐브 그리드 툴의 완료 버튼을 누르면 큐브그리드의 형태가 확정되면서 라이팅의 영향을 받게됩니다.

한 번 원하는 형태를 만들어서 적용해봅시다.

퀵셀로 꾸미기

이렇게 형태를 완성한 다음에는 콘텐츠 브라우저에 우클릭해서 [퀵셀 콘텐츠 추가] 항목을 선택해서 브릿지 패널을 열고 프로토타입 레벨을 꾸밀 수 있는 여러 가지 텍스처와 모델을 가져올 수 있습니다.

몇 가지 텍스처와 모델을 가져와서 꾸며보도록 합시다.

레벨을 모두 꾸민 다음에는 레벨에 플레이어 스타트 액터를 배치합니다.

그리고 게임 플레이 버튼을 눌러서 플레이 모드로 들어가면 이제 테스트로 만든 프로토타입용 레벨을 돌아다녀볼 수 있습니다.

아웃트로

이런 식으로 큐브그리드 기능과 퀵셀을 사용하면 프로토타입용 레벨을 빠르게 만들어볼 수 있습니다.

이번 영상에서는 프로토타입 레벨을 만들기 위해 빈 레벨의 환경을 설정하고 큐브그리드 기능으로 구조물을 빠르게 생성하는 방법을 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요!

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 언리얼 엔진 5의 레벨 에디터 뷰포트 조작법을 알아봅시다!

 

사용 엔진 버전 : 5.0.1

 

타임라인

0:00 인트로

0:27 레벨 에디터 뷰포트

0:53 원근 뷰 조작법

3:03 직교 뷰 조작법

4:16 액터 선택

4:50 액터 이동 툴

6:14 액터 회전 툴

6:46 액터 스케일 툴

7:47 표시 조작

9:27 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번 영상에서는 언리얼 엔진 5 레벨 에디터의 뷰포트 조작법에 대해서 알아보도록 하겠습니다.

뷰포트의 조작법을 알아보기 위해서 언리얼 엔진을 실행하고 새 프로젝트를 하나 생성하겠습니다.

프로젝트 카테고리는 게임으로 선택하고, 템플릿은 기본으로 선택하겠습니다.

프로젝트 세팅은 그대로 두고 프로젝트 생성 버튼을 눌러 새 프로젝트를 생성합니다.

레벨 에디터 뷰포트

프로젝트가 생성되어서 언리얼 에디터가 실행되면 이렇게 간단하게 탁자와 의자가 배치되어 있는 레벨이 보이는 뷰포트가 화면 한 가운데에 위치할 겁니다.

이 레벨 에디터의 뷰포트는 플레이어들이 게임을 경험할 월드를 돌아다니며 액터를 배치하는 등의 작업을 할 수 있는 패널입니다.

기본적으로는 언리얼 엔진 4와 크게 달라진 점이 없기 때문에 언리얼 엔진 4를 다뤄보신 분들이라면 금방 적응할 수 있을겁니다.

원근 뷰 조작법

그럼 제일 먼저 이 뷰포트 안에서 레벨 안을 돌아다니고 둘러보는 방법부터 알아보도록 하겠습니다.

이렇게 뷰포트 안의 레벨이 원근감 있게 보이는 상태를 원근 뷰라고 하는데 이 상태에서 마우스 버튼을 좌클릭하고 좌우로 드래그하면 뷰포트 카메라가 좌우로 회전하고, 마우스를 앞뒤로 움직이면 뷰포트 카메라가 앞뒤로 움직입니다.

우클릭한 상태로 마우스를 움직이면 뷰포트 카메라가 이동하지는 않고 회전만 합니다.

마우스 좌우 클릭을 동시에 한 상태로 움직이면 뷰포트 카메라가 위, 아래, 좌, 우로 움직입니다.

이 방법들이 뷰포트 카메라를 이동이나 회전시키면서 레벨을 둘러보는 기본 방법이지만, 레벨 안을 이동하면서 둘러보기 위해서 계속 클릭, 드래그를 반복하는 작업은 꽤나 불편합니다.

레벨 안을 둘러보는 좀 더 쉬운 방법으로는 우클릭을 유지한 상태로 WSAD 키를 눌러서 FPS 게임처럼 움직이는 방법이 있습니다.

우클릭을 유지한 채로 마우스를 움직여서 원하는 방향을 바라보고 WSAD 키로 이동할 방향을 조절할 수 있기 때문에 아주 편하게 레벨 안을 살펴볼 수 있습니다.

추가로 이 상태에서 [E]와 [Q] 키를 누르면 뷰포트 카메라를 위, 아래로 이동시킬 수 있고, [C]와 [Z] 키를 눌러서 뷰포트 카메라를 줌 인/줌 아웃 시킬 수 있습니다.

우클릭한 상태로 한 줌 기능은 마우스 우클릭을 떼는 순간 원래대로 돌아옵니다.

그리고 우클릭한 채로 WSAD로 이동중 일 때, 마우스 휠을 돌리면 뷰포트 카메라의 이동 속도를 조절할 수도 있습니다.

하지만 레벨의 너무 먼 곳에 있는 액터를 이런 FPS식 조작법으로 직접 찾아가기는 어려울 겁니다.

이럴 때는 보려고하는 액터를 아웃라이너 패널에서 찾아서 선택한 다음, 더블클릭하거나 단축키 F를 누르면 뷰포트 카메라가 선택한 액터를 빠르게 포커싱합니다.

이렇게 쭉 설명한 방법을 통해 레벨 안을 자유롭게 돌아다닐 수 있습니다.

그리고 선택한 지점이나 관심있는 액터를 좀 더 자세히 살피고 싶을때는 Alt키를 누른 채로 좌클릭 드래그하면 포커싱한 액터나 지점을 중심으로 회전하고 우클릭 드래그하면 포커싱 지점을 대상으로 뷰포트 카메라가 앞뒤로 움직입니다.

직교 뷰 조작법

여기까지는 원근 뷰 상태에서의 뷰포트 카메라를 다루는 방법을 배워보았고, 이제부터는 직교 뷰 상태에서 뷰포트 카메라를 다루는 방법을 알아보겠습니다.

직교 뷰는 원근 뷰와는 다르게 거리에 따른 왜곡없이 실제 길이로 보이게 만드는 뷰입니다.

원근 뷰에서 직교 뷰로 바꾸기 위해서는 뷰포트의 좌측 상단에 [원근]이라고 적힌 뷰포트 유형 버튼을 누른 뒤, 보이는 여러 직교 뷰 중에 하나를 선택하면 됩니다.

지금은 상단 뷰를 선택하겠습니다.

상단 뷰를 선택하면 입체적으로 보이던 의자와 탁자가 위에서 내려다본 선 형태로 바뀝니다.

의자와 탁자가 선으로 보이는 이유는 뷰 모드가 "브러시 와이어프레임"이기 때문입니다.

만약 원근 뷰에서 보이는 것처럼 보기를 원한다면 이 뷰 모드를 "라이팅 포함"으로 바꿔주면 됩니다.

그럼 다시 뷰포트 카메라 조작 이야기로 돌아가서, 직교 뷰 상태에서는 좌클릭 드래그를 하면 여러 개의 액터를 동시 선택할 수 있는 선택 박스가 생겨납니다.

그리고 우클릭 드래그로는 뷰포트 카메라 이동이 가능하며, 좌클릭과 우클릭을 동시에 한 상태로 드래그하면 줌 인/줌 아웃이 됩니다.

추가로 마우스 휠을 클릭/드래그하면 길이나 거리를 잴 수 있습니다.

뷰포트 카메라를 다루는 방법은 여기까지 입니다.

액터 선택

뷰포트의 카메라를 조작해서 원하는 위치로 이동하는 방법을 배웠으니 이제 뷰포트를 통해서 레벨에 배치되어 있는 액터들을 선택, 이동, 회전, 크기 조절 등 액터를 다루는 방법을 알아보겠습니다.

먼저 액터 선택입니다.

액터를 선택하는 방법은 아주 간단합니다.

선택하고자 하는 액터를 클릭하면 됩니다.

그리고 이렇게 한 액터를 선택한 상태로 선택되지 않은 액터를 Ctrl 키를 누른 상태로 클릭하면 선택 중인 액터에 추가할 수 있고, 선택된 액터를 Ctrl 키를 누르고 클릭하면 선택중인 액터에서 제외할 수 있습니다.

액터 이동 툴

그 다음은 트랜스폼 조작입니다.

트랜스폼 조작은 액터의 이동, 회전, 크기 조절을 의미하는 것으로 어느 툴을 활성화 시켰느냐에 따라서 기즈모의 모양이 바뀝니다.

각 툴을 활성화 시키는 버튼은 우측 상단의 제일 앞에 있습니다.

순서대로 이동 툴, 회전 툴, 스케일 툴입니다.

먼저 이동 툴을 활성화 시키겠습니다.

우측 상단의 이동 조작 버튼을 누르면 액터 이동 툴이 활성화 됩니다.

그리고 이동하고자 하는 액터를 클릭해서 선택하면 세 방향으로 뻗은 화살표 형태의 기즈모가 나타납니다.

이 때 각 방향의 화살표를 잡고 드래그하면 해당 축 방향으로 액터를 움직일 수 있게 되고, 두 축 사이의 사각형 부분을 잡고 드래그하면 두 축의 평면 방향으로 액터를 움직일 수 있게 됩니다.

언리얼 엔진을 처음 실행하면 위치 스냅이 걸려있어서 조금씩 옮기려고 하면 10cm단위로 움직입니다.

참고로 언리얼 엔진의 좌표 1단위는 1cm를 의미합니다.

10cm보다 크거나 작은 단위로 액터를 움직이고 싶다면 여기 우측 상단의 10이라고 적혀있는 위치 그리드 스냅 값 설정 버튼을 눌러서 스냅 단위를 바꿔주면 됩니다.

완전히 자유롭게 위치를 조절하고 싶다면 옆에 있는 위치 그리드 스냅 버튼을 눌러 위치 스냅을 꺼주면 됩니다.

액터 회전 툴

그 다음은 회전 툴입니다.

회전 툴을 활성화 시키면 기즈모의 모양이 육면체의 모서리를 동그랗게 잘라낸 듯한 모양으로 바뀝니다.

회전 툴에서는 각 축의 부채꼴 모양을 클릭하고 드래그하면 액터를 회전시킬 수 있습니다.

회전 툴에서도 이동 툴과 마찬가지로 회전 그리드가 10도로 설정되어 있어서 액터가 한 번에 10도씩 회전합니다.

회전 그리드 스냅 버튼을 이용해서 스냅을 끄거나 스냅 각도를 변경할 수 있습니다.

액터 스케일 툴

마지막으로 스케일 툴입니다.

스케일 툴을 선택하면 기즈모의 모양이 이동 툴과 비슷하지만 끝 모양이 화살표가 아닌 육면체 형태로 바뀝니다.

기즈모의 각 축을 잡고 드래그하면 액터가 축 방향으로 크기가 바뀝니다.

역시 이동 툴과 마찬가지로 축 사이를 잡고 드래그 하면 두 축 방향으로 크기가 바뀝니다.

그리고 스케일 툴 기즈모 가운데를 보면 하얀 육면체가 보이는데 이 하얀 육면체를 잡고 드래그하면 모든 축을 대상으로 크기가 바뀝니다.

3D 모델의 비율을 지키면서 크기를 변경하고 싶을 때는 이 방법을 사용하면 됩니다.

스케일 역시 그리드 스냅을 사용할 수 있습니다.

추가로 이동 툴, 회전 툴, 스케일 툴은 단축키로 간단하게 전환할 수 있습니다.

이동 툴의 단축키는 W, 회전 툴은 E, 스케일 툴을 R입니다.

표시 조작

마지막으로 다룰 뷰포트 조작법은 표시 조작입니다.

첫 번째는 게임모드 토글입니다.

뷰포트를 보면 의자나 탁자, 바닥같은 액터 이외에도 구슬, 게임 패드, 스피커 모양의 다양한 아이콘들이 떠있습니다.

이런 액터들은 월드에 배치되어 있지만 실제 게임 중에는 플레이어 눈에 보이지 않는 환경적인 요소들입니다.

게임 모드는 이런 환경적인 요소 아이콘들을 숨기고 실제 게임 화면에 가까운 화면을 보여주는 모드로 단축키 G를 누르면 게임 모드를 껐다 켤 수 있습니다.

게임 모드에서는 보다시피 아이콘들이 사라지고 스테틱 메시를 가진 액터들만 보이게 됩니다.

두 번째 표시 조작기능은 실시간 재생 기능입니다.

프로젝트를 만들 때 시작용 콘텐츠를 포함시켰다면 콘텐츠 브라우저에서 [StarterContent > Particles] 폴더에 들어가보면 여러가지 파티클들을 볼 수 있습니다.

이 중에 P_Fire 파티클을 레벨에 끌어서 배치해봅시다.

그럼 불꽃이 타오르는 모양이 계속 변화하는 장면을 볼 수 있는데 Ctrl + R 단축키를 누르면 좌측 상단에 실시간:꺼짐 이라는 표시가 생기고 파티클의 움직임이 멈추는 것을 볼 수 있습니다.

이렇게 실시간 재생기능을 꺼서 한순간의 움직임을 다각도로 살펴보거나, 불필요한 실시간 렌더링을 끔으로써 작업 중의 성능 향상을 꾀할 수도 있습니다.

마지막 표시 조작 기능은 몰입 모드입니다.

단축키 F11을 누르면 뷰포트가 전체화면이 되면서 몰입 모드가 됩니다.

이런 몰입 모드를 사용하면 화면을 더 크게 보면서 레벨의 디테일을 좀 더 상세하게 살피거나 만들어낸 레벨이 실제 게임처럼 전체화면이 되었을 때 어떤 느낌을 주는지 확인할 수 있게 됩니다.

그리고 몰입 모드에서 다시 F11을 눌러주면 원래의 레벨 에디터로 돌아갈 수 있습니다.

아웃트로

이번 영상에서는 언리얼 엔진 5 레벨 에디터의 뷰표트 조작법을 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

+ Recent posts