컴퓨터 및 게임 관련 전공인이 아닌 문외한 일반인이 언리얼 엔진을 배우면서 정리한 내용입니다.
그날그날 배웠던 내용을 제가 나중에 보기 위해 정리한 것으로, 지금 당장 보기에 부족한 점이 아주아주 많고 추후에 수정이 될 수도 있습니다.
오탈자 및 잘못 기재된 내용 지적, 부족한 내용 설명은 언제든지 환영입니다.
본글은 언리얼 엔진 5.5.4 버전 영문판을 기준으로 합니다.
----------------------------------------------------------------------------------------------------------------
42일차 학습 내용
- Constraint
Spring Board
Propeller
Radial Force Actor
Balloon
- Physics Material
Restitution
Friction
- Fracture
Uniform
Brick
Radial
- PCG
Floor
Wall
Gate
Constraint
41일 차에 이어서 "Physics Constraint" 와 관련된 것들을 몇 가지 더 응용해보도록 하겠다.
Spring Board
Spring Board는 수영장에 있는 다이빙대와 비슷한 것인데, 지난 41일차에서 배웠던 내용을 바탕으로 제작할 수 있다.
우선 레벨에 배치할 Spring Board 액터 BP를 생성해준다.

위 그림과 같이 Cube 2개와 "Physics Constraint" 를 배치해준다.
"Component Name" 에 기준과 움직이게 하고 싶은 것을 구분하여 입력하고, "Disable Collision" 을 활성화해주고, 움직이게 하고 싶은 오브젝트에는 물체에는 "Simulate Physics" 를 활성화해준다.
"Physics Constraint" 기준으로 y축의 회전만 있으면 되기에 "Swing 2" 만 제한을 풀어주고, 360º 회전 시킬 것이 아니기에 "Limited" 로 설정해준다.
"Angular Motor" 에서 "Twist" 회전은 필요없기에 "Swing" 에만 체크를 해주고, 중력이 작용함에도 제자리를 유지해야하기에, "Target Orientation Strength" 를 1000 정도의 값을 주면 된다.

그러면 위 그림과 같이 Spring Board가 정상적으로 작동하는 것을 확인할 수 있다.
Propeller
이번에는 Propeller를 제작해보도록 하겠다.
레벨에 배치할 Propeller 액터 BP를 생성해준다.

위 그림과 같이 돌아가게할 Static Mesh와 기준이 되는 Static Mesh를 생성해주고, 둘 사이를 "Physics Constraint" 로 연결해준다.
이번에 돌아갈 Static Mesh는 y축을 기준으로 360º 회전 시켜야하기에 "Swing 2" 만 제한을 풀어주고 "Free" 로 설정해준다.
Spring Board와 똑같이 "Angular Motor" 에서 "Twist" 회전은 필요없기에 "Swing" 에만 체크를 해주고, 다른 값은 수정해주지 않아도 된다.
이번에는 BP와 연동해서 사용을 해보도록 하겠다.

Event Graph로 들어가 위 그림과 같이 BP를 작성해준다.
매 틱마다 Timeline에서 설정한 값을 "Physics Constraint" 의 y축 회전 속도값으로 주는 것이다.

Timeline은 위 그림과 같이 해줘서 Propeller가 회전하다가 멈췄다를 반복하도록 해주었다.

그러면 위 그림과 같이 Propeller가 회전하다 멈췄다를 반복하는 것을 확인할 수 있다.
Radial Force Actor
"Radial Force Actor" 는 중심으로부터 사방으로 밀어내는 힘을 주는 액터이다.

우선은 "Radial Force Actor" 가 동작한다는 걸 가시화하기 위해 위 그림과 같이 "Simulate Physics" 가 적용된 Cube를 여러개 배치해준다.
위 그림과 같이 "Place Actor" 에서 "Radial Force Actor" 를 검색하면 레벨에 배치할 수 있다.

"Radial Force Actor" 에 날리는 힘을 주기 위해 위 그림과 같이 "Force Strength" 의 수치를 약 10,000,000 정도로 엄청 크게 설정해준다.

이번에도 BP를 이용하여 플레이어가 다가가면 "Radial Force Actor" 를 활성화시켜줄 것이기에, 이를 활성화 시키는데에 필요한 "Trigger Box" 를 "Place Actor" 에서 검색한 뒤 레벨에 배치해준다.

그리고 "Radial Force Actor" 또한 게임 시작 시 자동으로 활성화 되기에, 위 그림과 같이 "Auto Activate" 를 비활성화 시켜준다.
이번에는 Level BP를 사용할 것이기에, "Trigger Box" 를 클릭한 채로 위 그림과 같이 "Open Level BP" 를 클릭해준다.

위 그림과 같이 Level BP를 작성해준다.
"Trigger Box" 가 캐릭터를 인식하면 "Radial Force Actor" 를 활성화시켜주는 BP이다.


게임을 실행해보면 플레이어가 가까이 다가갔을 때, "Radial Force Actor" 가 활성화되어 양 옆에 쌓아둔 Cube들이 날아가는 것을 확인할 수 있다.
Balloon
이번에는 풍선을 한 번 제작해보도록 하겠다.
우선은 풍선 액터 BP를 생성해준다.

위 그림과 같이 Static Mesh와 "Physics Thruster" 를 생성해주고, Static Mesh의 "Mass Scale" (무게) 을 줄여준다.
"Physics Thruster" 의 x축 방향을 바닥쪽을 향하도록 설정하는 것도 잊어버리지 않도록 한다.

Static Mesh의 "Mass Scale" 이 많이 작기에, "Physics Thruster" 의 "Thrust Strength" 의 수치는 중력 가속도 만큼의 정도만 설정해준다.

풍선 액터 BP의 Event Graph로 가서 위 그림과 같이 BP를 작성해준다.
게임이 시작되면 무작위의 회전값을 줘서 풍선이 무작위로 회전하도록 만들어주었고, 매 틱마다 풍선이 올라갈 속력을 z축 방향으로 주었다.

그러면 위 그림과 같이 풍선이 각각 다르게 회전하며 위로 올라가는 것을 확인할 수 있다.
Physics Material
"Physics Material" (이하 "PM" 이라 칭함) 은 19일 차에서 했던 발소리에 사용했던 설정인데, PM을 통해서도 언리얼 엔진에서 적용되는 물리 법칙을 어느 정도 실험해볼 수 있다.
Restitution

"Restitution" 는 복원력 (탄력) 을 의미하는데, "Restitution" 의 수치가 높을 수록 복원력 (탄력) 이 높아지기에, 같은 높이에서 떨어뜨렸을 때 몇 번 더 튀어오르게 된다.

위 그림의 경우 좌측에 있는 PM의 "Restitution" 의 수치가 우측에 있는 것보다 낮은 것이다.
Friction

"Friction" 은 마찰력으로, 수치가 높을 수록 마찰력이 더 커져서 같은 힘을 줬을 때 덜 밀리게 된다.

위 그림의 경우 좌측에 있는 PM의 "Friction" 의 수치가 우측에 있는 것보다 높은 것이다.
Fracture
"Fracture" 는 충격이나 힘이 가해졌을 때 조각조각 나며 흩어지는 물리 현상을 구현화하는 것이다.

위 그림과 같이 좌측 상단에서 "Fracture" 탭을 통해 "Fracture" 모드로 진입할 수 있다.

"Fracture" 모드로 가면 위 그림과 같은 메뉴가 뜬다.

"Fracture" 설정을 해주려면 우선 좌측 상단의 "New" 를 눌러 새로운 "Geometry Collection" 생성해줘야한다.
Uniform

"Uniform" 을 선택해줄 경우 일반적으로 부서지는 효과를 줄 수 있다.
"Voronoi Sites" 는 쪼개지는 조각 갯수를 설정해줄 수 있고, Min와 Max 값 사이의 갯수로 조각이 나게 된다.
설정이 완료되면 "Fracture" 버튼을 눌러 확정할 수 있다.

"Fracture" 설정이 완료되면 위 그림과 같이 조각이 나는 부위가 각각 다른 색으로 표시되는데, "Show Bone Color" 의 체크를 해제하면 색이 표시되지 않게 된다.

"Fracture" 가 적용된 오브젝트를 높은 곳에 생성시키고, 떨어뜨리면 위 그림과 같이 조각조각 부숴지는 것을 확인할 수 있다.

잘 부숴지게 하고 싶다면 위 그림에 나와있는 "Damage Threhold" 값을 작은 값으로 수정해주면 된다.
*"Fracture" 는 컴퓨터 자원 소모량이 높기에 너무 많이 사용하지 않는 것이 좋음
Brick
"Brick" 은 레고 같은 블럭의 형태로 부숴지게 하는 효과를 줄 수 있다.


Radial
"Radial" 은 한 곳에 힘을 줘서 격파하는 듯한 효과를 줄 때 사용할 수 있다.

위 그림에 있는 "Angular Step" 은 조각이 퍼지는 방향을 나타내는데, '5' 라는 값이기에 5방향으로 쪼개지도록 오각형의 모양을 하고 있다.
"Radial Noise" 는 조각의 간격을 키워줄 때 사용하고, 수치가 높아질수록 간격이 넓어진다.

"Fracture" 를 눌러 설정을 완료한 후, "Explode Amount" 수치 조절을 통해 쪼개지는 정도를 확인이 가능하다.
"Outliner" 에서 쪼개어진 파편을 하나 선택한 후 "Explode Amount" 설정을 한 번 더 줘서, 쪼개어진 파편을 한 번 더 쪼개는 설정도 가능하다.

PCG
"PCG" 는 9일 차에서 했던 "Landscape" 와 다른 방식으로 대규모 월드를 쉽게 생성할 수 있도록 해주는 기능이다.
"Landscape" 와는 다르게 게임 런타임 중에도 레벨 수정 가능하다는 장점이 있다.
"PCG" 를 사용하려면 우선 Plugin 설치를 먼저 해줘야한다.

위 그림과 같이 "Plugins" 로 들어가서 "PCG" 를 검색한 후, "Procedural Content Generation Framework" 를 다운 받아주면 된다.
Floor

"PCG" 는 레벨을 구성할 액터 BP (Floor BP, Wall BP 등) 와 해당 "PCG" 에 사용할 "PCG Graph" 를 같이 생성해주고, 생성한 액터에 "PCG Graph" 를 삽입해줘야한다.

위 그림과 같이 우측 메뉴에서 "Graph" 에 "PCG Graph" 가 설정되어있는 것을 확인할 수 있다.
그리고 "Add" 버튼을 눌러 "PCG" 와 "Spline" 을 추가해줘야한다.

"Spline" 을 생성해주고 "Viewport" 에서 "Spline" 의 "Segment" 를 삭제해준 뒤, "Spline" 을 우클릭 하여 "Generate Spline Panel" 을 클릭해준다.

그러면 위와 같은 창이 하나 생성되는데, 여기서 우리가 설정해주고 싶은 지형의 모양 대로 선택해주면 된다.
우선은 바닥을 설정해줄 것이기에, 바닥의 일반적인 모양인 "Square" 형식으로 생성해주고, 임시로 "Length" 에 수치를 입력하여 길이를 설정해준다.
추후에 늘리는 것이 가능하기에 대충 설정해줘도 된다.

이런 식의 닫힌 도형으로 설정할 경우 "Closed Loop" 를 반드시 체크해줘야 정상적으로 적용된다.
액터의 BP 설정은 끝나고 이번엔 "PCG Graph" 에서 추가 작업을 해줘야한다.

"PCG Graph" 에서 위 그림과 같이 노드를 검색하여 생성한 뒤 연결해준다.
닫힌 도형 내에서 오브젝트들을 생성해주는 것이기에 "Spline Sampler" 노드에서 "Dimention" 을 'On Interior' 로 바꿔주고, "Unbounded" 를 체크해준다.
"Interior Sample Spacing" 은 "PCG" 구역 내에서 배치하는 오브젝트의 사이 간격을 나타내고, "Interior Boarder Sample Spacing" 은 "PCG" 구역 중 오브젝트를 생성하지 않을 외곽으로부터의 거리를 나타낸다.

"Transform Points" 노드에서는 배치되는 오브젝트에 관련된 설정을 할 수 있다.
"Offset" 값은 오브젝트의 배치 간격에 변화를 주는 값이고, "Rotation" 은 오브젝트의 회전각에 변화를 주는 값이고, "Scale" 은 오브젝트의 크기에 변화를 주는 값이다.
이 세 가지 값을 조절하여 좀 더 자연스러운 느낌을 줄 수 있다.

레벨에 "PCG" 를 배치하면, 디버그 상태이기에 위 그림과 같이 Cube가 생성되어 오브젝트가 어떻게 생성될 것인지 미리 확인할 수 있다.
"Segment" 를 잡고 이동시켜 닫힌 도형의 넓이를 늘리면 "Segment" 구역 내에 생성되는 오브젝트의 수가 늘어난다.

"Static Mesh Spawner" 노드의 "Mesh Entries" 에서 배열을 추가하여 레벨에 배치할 오브젝트를 넣어주면 된다.

"Transform Points" 노드에서 "Offset" , "Rotation" , "Scale" 값은 주지 않았기에, 위 그림과 같이 레벨 상에 오브젝트가 규칙적으로 배치되는 것을 확인할 수 있다.

"Static Mesh Spawner" 노드의 "Mesh Entries" 에서 배열을 하나 더 추가하여, 2가지 종류의 오브젝트를 무작위로 섞어서도 배치 가능하다.

두 가지의 오브젝트를 넣어줄 경우, 위 그림과 같이 무작위로 섞어서 생성해준다.

기본적으로 생성되는 오브젝트들은 "Collision Presets" 가 "No Collision" 으로 설정되어있기에, 충돌 판정을 주고 싶으면 바꿔줘야한다.
Wall
벽 또한 바닥과 마찬가지로 액터 BP와 "PCG Graph" 를 생성해주고, 액터 BP의 "Graph" 에 "PCG Graph" 를 설정해준다.
그리고 "Add" 버튼을 눌러 마찬가지로 "PCG" 와 "Spline" 을 추가해준다.
벽은 바닥과는 다르게 선형으로 배치하기에 "Spline" 에 따로 설정해줄 것은 없다.

선형으로 배치하기에 "Spline Sampler" 의 "Dimention" 은 'On Spline' 으로 설정하고, "Mode" 를 'Distance' 로 설정해주면 된다.

"Distance Increment" 에서는 배치될 오브젝트의 간격을 설정해줄 수 있다.

위 그림과 같이 노드들을 생성하고 연결해줄 경우, 벽을 여러겹으로 쌓고 해당 벽 위에 오브젝트를 추가로 쌓을 수도 있다.
이 경우에는 "Offset Min" 과 "Offset Max" 값에 겹겹이 쌓을 z축 위치값을 같은 수치로 설정해줘야한다.
Gate
이번에는 위에서 생성한 벽에 다른 오브젝트를 삽입하여 대체하는 기능을 넣어보도록 하겠다.
우선은 삽입할 액터 BP를 만들어주고, 벽에 구멍 비슷한 것을 뚫을 것이기 때문에 "Gate" 라는 이름으로 지어주었다.

위 그림과 같이 "Get Actor Data" 노드를 생성해준다.
"Actor Filter" 를 'All World Actors' 로 설정해주고, "Actor Selection" 을 'By Tag' 로 바꿔준 뒤 "Actor Selection Tag" 를 위에서 생성한 'Gate' 를 입력해주고, "Select Multiple" 을 체크해준다.

그리고 위 그림과 같이 노드들을 생성한 뒤 연결해준다.
"Difference" 노드에 연결된 "Static Mesh Spawner" 에는 작은 덤불 오브젝트를 넣어주었다.

위와 같이 노드를 연결해주고 규칙적으로 나열된 벽 사이에 "Gate" 액터 BP를 배치해주면, 위 그림과 같이 해당 자리에는 벽 대신 "Gate" 에 삽입된 오브젝트가 생성되는 것을 확인할 수 있다.
*기존에 배치된 "Spline" (위 그림의 경우 Wall의 Spline) 과 겹쳐야 대체 오브젝트가 생성됨
*아래 그림과 같이 "By Tag" 가 아닌 "By Class" 로도 대체 삽입이 가능; 이 경우 "By Class" 에 해당 BP를 지정해줘야함

'Unreal Engine > GCC Class (5.5.4)' 카테고리의 다른 글
| Unreal Engine 5 배워보기 - 44일차 (0) | 2025.05.26 |
|---|---|
| Unreal Engine 5 배워보기 - 43일차 (0) | 2025.05.23 |
| Unreal Engine 5 배워보기 - 41일차 (0) | 2025.05.21 |
| Unreal Engine 5 배워보기 - 40일차 (1) | 2025.05.20 |
| Unreal Engine 5 배워보기 - 39일차 (2) | 2025.05.19 |