Unreal Engine/GCC Class (5.5.4)

Unreal Engine 5 배워보기 - 6일차

보별 2025. 3. 25. 19:35
반응형

컴퓨터 및 게임 관련 전공인이 아닌 문외한 일반인이 언리얼 엔진을 배우면서 정리한 내용입니다.
그날그날 배웠던 내용을 제가 나중에 보기 위해 정리한 것으로, 지금 당장 보기에 부족한 점이 아주아주 많고 추후에 수정이 될 수도 있습니다.
오탈자 및 잘못 기재된 내용 지적, 부족한 내용 설명은 언제든지 환영입니다.

본글은 언리얼 엔진 5.5.4 버전 영문판을 기준으로 합니다.


----------------------------------------------------------------------------------------------------------------

 

6일차 학습 내용

- Unreal Engine 저사양 컴퓨터에서 돌리는 방법

클래스 (Class)

- 캐릭터 설정

   "Game Mode Base BP" 설정

   마네킹 및 카메라 설정

   캐릭터 조작 설정

   시점 설정

- 캐릭터 애니메이션 설정

   캐릭터 모델링 변환

   "Animation Blueprint"

   "Blend Space"

 

 

Unreal Engine 저사양 컴퓨터에서 돌리는 방법

언리얼 엔진 5를 안정적으로 돌리려면 고사양의 컴퓨터가 필요하지만, GTX 1060 정도의 저사양 컴퓨터에서도 어느정도는 돌릴 수 있다.

일단 오른쪽 상단의 "settings" 를 누르면 뜨는 창에서 "Engine Scalabililty Settings" 를 전부 'Low' 로 바꿔준다.

엔진의 그래픽 설정을 모두 낮추는 것이다.

그리고 "Project Settings" 의 "Platforms" 의 "Windows" 에 들어가서 'DirectX 12' 를 해당 컴퓨터에 맞게 낮춰주면 된다.

일반적으로 'DirectX 11' 로 낮춰주면 된다.

물론 프로그램 프리징이나 강제 종료 등 안정성은 보장 못하기에 저사양 컴퓨터로 돌릴 시에는 저장을 습관화하고, 되도록이면 고사양의 컴퓨터를 준비하는 것이 좋다.

 

클래스(Class)

클래스 함수랑 비슷하지만 약간의 차이점이 있다.

"클래스(Class)" 는 오브젝트를 만들기 위한 하나의 틀이다. 변수와 함수를 포함하여 하나의 오브젝트를 정의하는 역할을 한다.
함수는 함수 내에 또 다른 함수를 가질 수 없지만, 클래스는 함수, 변수, 배열 등 다양하게 포함이 가능하다.

 

캐릭터 설정

"Blueprint" 폴더에 "Gamemode" 와 "Player" 폴더를 생성하고, 각각의 폴더에 'GM_Default' 라는 이름의 "Game Mode Base BP" 와 'BP_Player' 라는 이름의 "Character BP" 를 생성한다.

그리고 새로운 레벨을 'Basic' 형식으로 생성한 뒤, 해당 레벨의 "worldsettings" 의 "Game Mode" 를 "GM_Default" 로 바꿔준다.

임시로 캐릭터를 배치하기 위해 "Contents Drawer" 의 "Add" 를 눌러 "Add Fitures or Content Pack" 에서 'Third Person' 을불러와 여기에 있는 기본 모델링을 사용한다.

"Game Mode Base BP" 설정

"Classes" 탭에서 "Default Pawn Class" 를 'BP_Player' 로 설정한다.

"Default Pawn Class" 는 게임할 때 직접 플레이할 기본 캐릭터를 설정하는 것이다.

해당 BP에서는 이것 외에 설정할 것이 없다.

마네킹 및 카메라 설정

우측의 "Mesh" 탭의 "Skeleton Mesh" 에서 "Third Person" 의 마네킹을 가져온다.

여기서 마네킹을 가져올 때, 반드시 마네킹의 경로 확인해야한다.

나중에 에셋 사용할 경우 여러 에셋 별로 설정을 해야하는데, 에셋의 썸네일이 비슷해 잘못 가져오면 제대로 적용이 안되기에 미리 경로를 확인하며 가져오는 습관을 들여오는게 좋다.

마네킹을 스켈레톤 메시에 입히면 마네킹이 캡슐 컴포넌트(충돌인식 범위)의 방향 및 시점이 맞지 않는다.

이는 스켈레톤 메시의 z축 위치값에 -90, z축 회전값에 -90 을 입력하여 일치시켜줄 수 있다.

'alt + p' 로 확인 시 캐릭터가 카메라와 겹쳐서 제대로 확인되지 않는데, 이는 'F8' (일시정지)을 누른 뒤 시점 변경으로 확인이 가능하다.

캐릭터 조작 설정

캐릭터 조작의 코드를 짜려면 원래 '==' 노드를 통해 True값을 확인한 뒤, 앞으로 이동하는 명령을 내려야하는 코드를 따로 짜야한다.

하지만 언리얼 엔진에서 기본적인 코드 프리셋을 제공하기 때문에 따로 코드를 짤 필요없이 키 바인딩만 해주면 된다.

첫번째는 "Project Settings" 의 "Engine" 탭의 "Input" 에서 캐릭터의 조작 관련 설정 가능하다.

해당 탭을 열면 위와 같은 사진이 뜨는데, 'Action Mappings' 와 'Axis Mappings' 두 가지의 매핑 방식으로 나뉘어져 있는 것을 확인할 수 있다.

'Action Mappings'클릭이나 버튼을 눌렀다 뗐을 때에 반응하는 형식을 매핑할 때 사용하고, 'Axis Mappings' 입력된 숫자만큼 반응하는 방식이다.

단순한 캐릭터 조작 시에는 'Axis Mappings' 만 필요하기에 아래 사진처럼 설정한다.

키 바인딩이 제대로 됐는지 확인하는 방법은 "Print Text" 노드를 통해 확인 가능하다.

해당 BP는 아래와 같다.

위에서 설정한 "InputAxis" 의 모든 방향 이동 이벤트 그래프를 생성하고, "Format Text" 에서 키를 입력 시 설정된 value 값이 나오도록 식을 넣어준 뒤, "Print Text" 노드를 연결하여 바인딩된 키를 입력 시 키와 연결된 value 값이 출력되면 제대로 바인딩이 된 것이다.

바인딩이 제대로 된 걸 확인했으면 이번엔 이동방향을 정해주는 벡터 관련 코드를 짜줘야한다.

"Add Movement Input" 노드가 이동과 관련된 노드인데, 해당 노드를 이동에 상응하는 이벤트 그래프에 연결해주면 된다.

해당 노드에는 매개변수 4개 존재하는데, 각 값과 관련된 값을 연결해주면 동작한다.

앞으로 이동하는 명령어로 예를 들어보겠다.

우선 앞으로 이동하려면 '앞으로 이동' 이라는 벡터를 "Add Movement Input" 노드에 추가해줘야하는데, "Get Actor Forward Vector" 라는 노드를 "World Direction" 핀에 연결해주면 '앞으로 이동' 이라는 이동방향을 "Add Movement Input" 노드에 줄 수 있다.

그리고 'Target' 에 적혀있는 'Self' 는 자기 자신을 가리키는 것이기에, 자기 자신을 앞으로 보내는 것이다.

즉, 앞으로 이동하는 키인 'w' 를 누르는 인풋이 있으면 "Scale Value" 값인 '1' 을 출력하고 (위에서 설정한 axis), '1' 이라는 값이 "Add Movement Input" 입력되면 "Forward Vector" 에 라는 명령이 실행되어 앞으로 이동하게 된다.

그 다음은 화면을 상하좌우로 이동하는 노드를 만들어주면 된다.

그 전에 축에 따른 회전의 이름은 아래와 같다.

출처: https://minji11203.tistory.com/12

위와 같은 회전방식을 각각 'roll' , 'pitch' , 'yaw' 라고 한다.

우리가 화면 상하좌우 이동에 쓰이는 회전인, 틸팅 'pitch' 과 패닝 'yaw' 만 사용한다.

화면 상하좌우 이동의 BP는 위 사진과 같이 연결해주면 된다.

상하로 움직이는 것은 "pitch" 회전이기에 "LookUp" 노드와 연결해주고, 좌우로 움직이는 것은 "yaw" 회전이기에 "LookRight" 노드와 연결해준다.

여기서 주의해야할 점이 있는데 "MouseSpeed" float 변수를 만든 뒤, 반드시 노드의 value를 0이 아닌 정수로 해줘야한다는 점이다.

'0' 으로 설정하게 되면 '0' 에 무슨 수를 곱해도 '0' 이 출력되기 때문에 화면이 아예 움직이지 않는다.

* "Delta Seconds" 노드는 프레임 간의 시간 간격을 의미, 즉 '시간차' 를 의미

전체적으로 설정된 BP를 보면 위 사진과 같고, 이렇게 하면 캐릭터 앞뒤좌우, 카메라 상하좌우 이동과 관련된 키 바인딩이 완료된다.

이 방법은 BP만을 사용하는 쉬운 방법이나, 모바일이나 콘솔 게임 제작 시 해당 플랫폼으로 키 바인딩을 하게 되면 복잡해지기에 주로 두번째 방법을 많이 사용하게 된다.

두번째는 "Enhanced Input" 이라는 플러그인을 통해서 가능하다.

"Enhanced Input" 을 통해 동작 설정 시 BP에서 다양한 값을 줄 수있기에, 위의 방법보다는 이 방법이 더 선호되는 편이다.

우선 "edit" 탭의 "Plugins" 에서 "Enhanced Input" 을 검색하여 플러그인이 설치돼 있는지 확인해준다.

(보통 자동으로 설치가 돼있다.)

"Input" 폴더를 새로 만들어준 뒤, 빈공간을 우클릭 하여 "Input" 의 "Input Action" 을 3개 만들어준다.

그리고 각각의 이름을 "IA_Move" , "IA_Look" , "IA_Jump" 로 지어준다.

"IA_Move" , "IA_Look"의 경우는 위 사진처럼 "Action Value Type" 을 "Axis2D" 로 설정해주고, "IA_Jump" 는 따로 건드리지 않는다.

"Action Value Type" 을 "Axis2D" 로 설정해주는 이유는 상하와 좌우 각각 '1.0' , '-1.0' 값을 주기 때문이다.

다음으로 "Input" 폴더의 빈공간을 우클릭 하여 "Input" 의 "Input Mapping Context" 를 만들어준다.

Swizzle Input Axis Value: 축 값을 내가 바라보는 방향 기준 x축으로 함 / Negate: 반대로 동작하게 함

"Input Mapping Context" 를 더블클릭하여 들어가면 키 매핑을 할 수 있다.

우선 큰 틀인 "IA_Move" 를 불러와 'Modifiers' 를 위와 같이 설정해준다.

"Modifiers" 는 해당 키를 입력했을 때 어떤 형식의 값을 줄지 결정해주는 것이다.

그리고 나머지 "IA_Look" , "IA_Jump" 를 불러온 뒤, 위와 같이 설정해주면 된다.

"IA_Look" , "IA_Jump"는 'Modifiers' 를 따로 건드리지 않아도 된다.

이벤트 그래프 탭으로 이동하여 위와 같이 노드를 만들어준다.

가운데에 있는 "Enhanced Input Local Player Subsystem" 은 우클릭 한 뒤 "Enhanced Input World SupSysem" 을 입력하여 불러올 수 있다.

"Add Mapping Context" 노드에서 'Mapping Context' 를 지정할 때 위에서 제작한 "IMC_Player" 를 불러와야하는데, 다른 폴더에 같은 이름을 가진 다른 파일이 있을 수도 있으므로 불러오기 전에 경로를 꼭 확인한다. 

Triggered: 틱마다 실행 / Started: 눌렀을 때 처음 한 번만 실행 / Canceled: 뗐을 때 실행 / Ongoing: 지정한 시간동안 눌러주면 실행 / Completed: 2개의 값을 동시에 줬을 때 실행

"Enhanced Input Action" 노드 중 "IA_Move" 노드를 불러와 위와 같이 제작해준다.

주의할 점은 x축 값은 좌우 이동이기 때문에 "Right Vector" 에 연결돼야하고, y축 값은 앞뒤 이동이기 때문에 "Forward Vector" 에 연결돼야한다.

"Enhanced Input Action" 노드 중 "IA_Jump" 는 위와 같이 제작해준다.

"Enhanced Input Action" 노드 중 "IA_Look" 은 위에서 했던 것처럼 "Delta Second" 노드를 삽입해 똑같이 제작해주면 된다.

여기서도 좌우로 움직이는 것은 x축 상으로 왔다갔다하는 것이기에 "yaw" 노드와 연결해주고, 상하로 움직이는 것은 y축 상으로 왔다갔다하는 것이기에 "pitch" 노드와 연결해준다. 

여기서 "pitch" 노드 입력값에는 "Delta Second" 의 결괏값에 '-1' 을 곱해줘야하는데, "pitch" 는 마우스가 인식하는 반대 방향으로 설정해야 시점 이동이 자연스럽기 보이기 때문이다.

이렇게 하면 캐릭터 앞뒤좌우, 카메라 상하좌우 이동과 관련된 키 바인딩이 완료된다.

시점 설정

시점을 설정한다는 것은 플레이어가 바라볼 화면을 비출 카메라를 설정한다는 것이기에, 캐릭터를 따라다니는 카메라를 설정해줘야한다.

우선 "Mesh" 를 누르고 "add" 를 눌러 "Spring Arm" 을 추가한다.

이렇게 하면 추가 설정이 필요없이 "Spring Arm" "Mesh" 에 종속된다.

여기서 추가하는 "Spring Arm" 은 카메라가 컴포넌트를 부드럽게 따라가도록 설정할 수 있게 도와주는 것이다.

즉, 셀카봉 역할을 해서 캐릭터를 지속적으로 비춰주는 역할을 하는 것이다.

그리고 이 "Spring Arm" 누르고 "add" 를 눌러 이번엔 "Spring Arm" 에 종속되는 "Camera" 를 추가해준다.

위 과정을 거치면 "Spring Arm""Mesh" 에 종속된 상태라 카메라와 캐릭터의 시점이 맞지 않는다.

위에서 캐릭터의 z축 위치값에 -90, z축 회전값에 -90 이 설정돼있는 상태이기 때문이다.

원래대로 되돌려주기 위해 다시 각각의 값에 '90' 을 추가해준다.

이렇게 하면 기존에 '-90' 이었던 것에 '90' 을 더하게 되어 '0' 이 되기 때문이다.

"Spring Arm" 의 "details" 탭에서 "Target Arm Length" 는 카메라와 캐릭터 간 거리를 조절해주는 역할을 한다.

카메라의 벡터를 잡고 움직여서 위치값을 변경해줄 수도 있으나, 나중에 시점을 조절할 때 수치 조절로 통일성을 주기 위해 되도록이면 "Target Arm Length" 로 조절해주는 것이 좋다.

*tps에서 줌인 할 때 캐릭터 얼굴 옆모습이 조금 보이도록 시점을 살짝 옆으로 틀어주면, 캐릭터도 가운데를 보고 플레이어도 가운데를 보기 때문에 조준한다는 몰입감을 줄 수 있음

해당 방식은 "Target Offset" 으로 설정해줄 수 있음

"BP_Player" 의 "details" 탭에서 'pawn' 을 검색하여 "Use Controller Location Yaw" 만 체크해준다.

이는 'yaw' 회전 시에만 캐릭터를 카메라와 같이 움직인다는 의미이다.

'pitch' 에 체크 시, 카메라를 상하로 움직이면 캐릭터도 상하로 같이 회전해서 어색해진다.

"BP_Player" 하위 항목인 "Spring Arm" 에서 "Camera Settings" 탭의 "Use Pawn Control Rotation" 을 체크해준다.

카메라만 시점 이동하고 캐릭터는 가만히있게 해주는 것이다.

socat offset 소켓 오프셋 조정 X 마우스 시점 이동에 따라 캐릭터 시점이 바뀜

소켓 오프셋 조정으로 카메라 위치 고정

 

캐릭터 애니메이션 설정

캐릭터 모델링 변환

캐릭터의 모델링을 바꿔보도록 하겠다.

우선 다운받은 캐릭터 모델링 에셋을 "BP_Player" 의 스켈레톤 메시에 적용시켜준다.

다운 받은 애니메이션 에셋에서 "Animation Sequence" 만 필터링해서 전체 선택을 해준 뒤, "Retarget Animation" 으로 원하는 스켈레톤 메시의 애니메이션으로 바꿔준다. 

"Animation Blueprint"

"Player" 폴더에서 우클릭을 하고 'Animation' 탭의 "Animation Blueprint" 를 생성해주고, 이름은 "ABP_Player" 로 설정해준다.

"Animation Blueprint" 는 캐릭터 애니메이션 스크립팅 전용 BP이다.

"Animation Blueprint" 에 들어가 아무 애니메이션을 연결하면, 해당 애니메이션이 스켈레톤에 제대로 연결되어서 정상적인 동작으로 진행되는지 확인할 수 있다.

애니메이션은 한 번 밖에 재생되지 않는데, 여기서 "detail" 탭의 "Loop Animation" 을 체크해주면 애니메이션이 무한 반복 재생된다.

"State Machine"

우클릭을 해서 "State Machine" 을 검색하여 노드를 만들고, 이름을 "Locomotion" 이라고 지어준다.

여기서 "State Machine" 은 재생할 수 있는 특정 애니메이션과 해당 애니메이션의 재생이 허용되는 조건을 부여하기 위해 사용하는 시스템이다.

주로 걷기, 달리기 등 캐릭터 이동에 관한 애니메이션 관리할 때 사용한다.

"Locomotion" 에서 이동 관련 동작을 일일이 추가해줄 수도 있지만, 그렇게 되면 연결선이 너무 복잡해져서 직관성도 떨어지고 해석도 어려워지기에, 다른 기능을 통해 간단화를 시켜준다.

"Blend Space"

"Player" 폴더에서 우클릭을 하고 'Animation' 탭의 "Blend Space" 를 생성해주고, 이름은 "BP_Movement" 로 설정해준다.

"Blend Space" 는 많은 애니메이션이나 포즈를 그래프로 구성하여 블렌딩할 수 있게 도와주는 에셋이다.

모든 이동 관련 애니메이션을 한 번에 관리할 수 있게 해주는 에셋이다.

우선 가운데에서 나올 그래프의 x, y축 값을 각각 'angle' 과 'speed' 로 설정해준다.

그리고 x축 값인 angle의 최소, 최댓값을 각각 -180, 180으로 설정해주고, y축 값인 speed의 최소, 최댓값을 각각 0, 100으로 설정해준다.

x축 값이 '+' 면 오른쪽으로 이동하는 것이고, '-' 면 왼쪽으로 이동하는 것이다.

위에서 뽑은 애니메이션을 위 사진의 위치에 각각 놓아준다.

그리고 ctrl을 누른 상태로 마우스를 이동해서 애니메이션이 제대로 동작하고 자연스럽게 변하는지 체크할 수 있다.

idle 애니메이션과 위에서 제작한 "BS_Movement""State Machine" ("Locomotion") 안에 놓고, 위 사진처럼 연결해준다.

화살표 위에 있는 원 안의 조건에 따라 idle 애니메이션과 "BP_Movement" 를 왔다갔다하며 실행된다.

아까 설정한 "BS_Movement" 에서 'Angle' 과 'Speed' 의 핀을 각각 당겨와 "Promote to variabel" 을 눌러 변수로 만들어준다.

'Idle' 상태에서 'Movement' 상태로 간다는 것, 즉 움직인다는 것은 가만히 있는 상태에서 속도가 붙는다는 것이기에, "Speed" 값이 '0' 이상일 경우 "BP_Movement" 가 실행되게 설정해주면 된다.

그러므로 위 사진과 같이 조건식을 적용시켜준다.

'Movement' 상태에서 'Idle' 상태로 간다는 것, 즉 멈춘다는 것은 캐릭터에게 속도가 없는 상태, 속도가 '0' 이라는 것이기에, "Speed" 값이 '0' 일 경우 "BP_Idle" 이 실행되게 설정해주면 된다.

그러므로 위 사진과 같이 조건식을 적용시켜준다.

"Not Boolean" 을 입력하면 위 사진처럼 "Not" 이라고 적힌 노드가 생성된다.

마지막으로 이벤트 그래프에서 노드를 위와 같이 작성해주면 최종적으로 캐릭터를 움직일 때 애니메이션이 적용되게 할 수 있다.

 

블루프린트 업데이트

애니메 블루프린트를 갖고 있는 폰을 self에 지정

bp_player는 캐릭터라는 클래스로 이루어져