본문 바로가기
Unreal/공부

How to make a 2D game in Unreal Engine 5 - Beginner Tutorial

by 보안매크로 2024. 4. 13.
728x90

1. 빈 프로젝트 생성

2. Empty Level 선택

3. ctrl + space = Content Drawer 여는 단축키, 열어서 Content안에 Maps 폴더 생성

4. 현재 레벨을 다른 이름으로 저장 해서 Maps 폴더 안에 Map_SideScrolls로 저장

5. 다운 받은 에셋파일에서 PNG 폴더만 언리얼로 가져온다.

6. 다운 받은 파일중 하나를 선택해서 마우스 우클릭 > Sprite Actions > Apply paper2D Texture Settings 해주기

7. environment > layers > back(background)를 선택하고 Sprite Actions > Create Sprite 하면 실제로 게임에 배치할 수 있는 Sprite( 2D 그래픽 객체)가 생성된다. 

8. 배경을 0,0,0에 위치시키고, tileset도 Sprite Actions > Create tileset 해서 더블클릭 해서 열어준다. 크기조정 등 다양한 기능이 있다. Colliding Tiles 하고 충돌이 필요한 블럭을 선택하고 Add box를 해주자. 그래야 캐릭터와 바닥이 충돌할 수 있다.

9. 만든 tileset 마우스 우클릭 해서 Create Tile Map 해준다. 역시 더블클릭해서 열어준다. 블록을 옮겨서 모양을 만들고
저장, 0,0,0에 두고 백그라운드의 y값을 조금 뒤로 보내자.

10. 아래 사진처럼 충돌 방지를 위해 Collision을 켜준다. (오브젝트들 경계를 시각적으로 볼 수 있다.)

11. 이제 캐릭터를 만들기 위해 sprites - player - idle 에 들어가 4개의 사진을 선택하고 Create Sprite 해준다. 만들어진 4개를 다시 선택해서, Create Flipbook 해준다. 이러면 애니메이션이 된다! 더블클릭해서 초당 프레임 조절 가능. 관례적으로 쉽게 계산하기위해 보통 60으로 함. 각 프레임은 4프레임동안 동작하게 함.

12. run 파일도 똑같이 해준다. jump는 단일 프레임(사진한장)으로 그냥 만들어준다.

13. BluePrint 파일 만들기 > PaperCharacter 블루프린트 만들기 > 더블클릭해서 열기
PaperCharacter"는 2D 게임 개발에 사용되는 클래스, 

14. 우측에 Source Flipbook에서 idle선택 해주기.

15. Capsule을 선택해서 크기를 줄여준다. 캡슐에 크기에 맞게 Sprite위치를 조정해주자. 게임을 시작해서 캐릭터가 바닥에 닿을 때, 발이 지면에 맞는지 체크해주자.

16. 게임을 시작하면 밝기가 바뀌는데, Edit - Project Settings 에서 auto exposure 체크 해제 해주자.

17. anti aliasing Method fxaa로 바꿔주자. 

18. 다시 블루프린트로 가서, 만든 SpriteCharacter 블프에서 Add - SpringArm, Camera 추가

19. SpringArm을 캐릭터가 보이게(2D니까 한방향에서만 보임) -90도 해주자, 약간 올리기도 해야함, Spring Arm Length도 가깝게 200으로 해주자.

20. 위 상태로만으로는 게임 시작 시 캐릭터에 카메라가 잡히는게 아니라, 자동으로 디폴트 카메라가 설정된다.

21. 뷰포트에 놓인 캐릭터를 삭제하고, PlayerStart를 만든다.

22. 언리얼에 캐릭터를 제어하기 위한 걸 알려주는 Game Mode Base 블루프린트를 생성해준다.

언리얼 엔진에서 "Game Mode Base" 블루프린트는 게임의 기본적인 규칙과 설정을 정의하는 클래스입니다. 게임 모드는 플레이어가 게임을 시작할 때 어떤 상황에서 게임이 시작되는지, 어떤 캐릭터를 사용할 수 있는지, 게임이 어떻게 진행되고 종료되는지 등의 규칙을 결정합니다.

  1. 플레이어 스폰: 게임이 시작될 때 플레이어가 게임 세계에 어떻게, 어디서 스폰될지를 결정합니다. PlayerStart 깔면 거기로 된다.
  2. 캐릭터 선택: 플레이어가 조종할 기본 캐릭터나 Pawn을 지정합니다.
  3. 게임 규칙 정의: 점수 계산 방법, 게임 오버 조건, 라운드 시간 제한과 같은 게임의 규칙을 설정합니다.
  4. 승리 조건: 게임의 승리 조건을 정의하여 어떤 상황에서 플레이어나 팀이 승리하는지를 결정합니다.
  5. 세션 관리: 플레이어의 연결과 연결 해제를 관리하고, 게임 세션의 흐름을 조절합니다.

23. Game Mode Base 블루프린트를 열고 우측에 Classes > Default Pawn Class를 BP_SpriteCharacter(PaperCharacter  블루프린트로 만듬)로 해준다.

24.Project Settings > Maps & Modes > Default Game Mode를 방금 만든 Game Mode Base 블루프린트로 해준다. 아래 디폴트맵들도 내가 만든 레벨의 맵으로 해주기.

25. 카메라로 돌아가, Details 에서 Max Brightness(EV100) 의 값을 2로 해주기.(밝기 조절)

26. 움직이기 위해, Project Settings > Input > axis Mappings, Action Mappings를 아래처럼 수정.

  27.아래 그림처럼 구성해준다.
Event Tick - 매 틱마다 동작, Update Animation - 애니메이션 계속 업데이트
InputAxis MoveLight(내가 설정한 키 누르면 내가 설정한 값을 전달), Add Movement Input - 움직임을 어디로 할지 정함. 어느방향으로 움직이는지, Scale 설정 가능.
Update Animation - Custom Event, Set Filpbook - 내가 설정한 플립북 동작, Sprite - Sprite(내가 설정해둔 플립북)의 참조
Chracter Movement - Character Movement의 참조, get Velocity - 현재 캐릭터의 속도
Vector Length - 벡터의 길이를 계산, 캐릭터의 속도 벡터를 계산하여 얼마나 빨리 움직이는지 계산함
Select - True or False 두가지 옵션중 하나를 선택, 속도가 0보다 크면 True, 0 이하면 False 애니메이션 선택
UpdateAnimation을 커스텀 함수로 선언하여, 위에서 Tick 마다 Update Animation에 신호를 쏴준다.

28. SunnyLandAssets > environment > layers 경로에 tileset_TileMap을 들어가서 땅을 키워준다.(Map Width 늘리고 블럭 놓기)

29. 이제 캐릭터가 움직일 때 뒤돌아보게 해보자. BP_SpriteCharacter에서 아래처럼 추가해준다.

  1. UpdateControlRotation Custom Event: 컨트롤 회전을 업데이트하는 로직을 실행하기 위해 사용
  2. Get Controller: 캐릭터를 제어하는 컨트롤러를 가져옵니다. "Is Pawn"이라는 체크는 이 노드가 폰(캐릭터)에 연결된 컨트롤러를 반환하도록 합니다.
  3. Is Valid: 이 조건 검사는 컨트롤러 객체가 유효한지(즉, null이 아닌지) 확인합니다. 유효하지 않은 경우, 다른 로직으로 분기될 수 있습니다.
  4. Character Movement: 캐릭터의 움직임을 관리합니다. 여기서 "Velocity"는 캐릭터의 현재 속도를 나타냅니다.
  5. Break Vector: 벡터를 그 구성 요소인 X, Y, Z로 분해합니다. 여기서는 캐릭터의 속도 벡터를 분해하고 있습니다.
  6. Compare Float: 부동소수점 값을 비교합니다. 일반적으로 속도의 크기나 다른 수치 값을 특정 기준과 비교하는 데 사용됩니다. 입력으로 들어온 값이 0보다 크면 맨위 > 값이 True, 같으면 =가 True, 작으면 < 가 True반환, 즉 0보다 작은경우 (-1)이므로 반대방향이여서 아래 Z 180을 넣은 로테이터가 넣어진채로 동작한다. 
  7. Make Rotator: 회전 값을 생성합니다. 여기서는 X(롤), Y(피치), Z(요)를 사용하여 새로운 Rotator를 만듭니다. Z=180을 해서 반대방향으로 회전.
  8. Set Control Rotation: 컨트롤러의 회전 값을 설정합니다. 여기서는 "Make Rotator"에서 만든 회전 값을 컨트롤러에 적용하여 캐릭터의 시선 방향을 변경할 수 있습니다. 

30. 캐릭터가 돌아갈때 카메라도 돌아간다. 따라서 Spring Arm에서 로테이션 타입을, World로 해줘야함.

31. 앞에 물체가 카메라 시야를 가리는 경우, Spring Arm에 Camera Collision에서 Do Collision Test 체크를 풀어주면 자동으로 시야를 가리는 물체가 있으면 카메라가 움직임

32. 이제는 Project Settings에서 input 입력하는걸 지원하지 않는다. Enhanced Input Mapping Context 를 사용

33. Input Mapping Context 생성 > 리소스에서 Jump 액션을 스페이스바로 설정

- 일단 잘 안되서 기존 방식대로 진행(프로젝트 세팅 - Input에서 설정)

34. 아래 사진처럼 노드들 추가해주기.

 

35. Character Movement - Max walk speed 300으로 낮추기(더 자연스럽게 하기위해서)

36. gravity Scale - 1.0 > 2.0으로 변경, 떨어지는 속도

37. jump Z Velocity(속도) 600 설정, 얼마나 높이 점프 가능한지 값 조정

38. air control - 0.8로 조정, 공중에서 컨트롤 가능한 정도(점프 뛰고 좌우 방향키 가능정도)

39. Camera Lag Speed(카메라가 캐릭터를 따라 이동하는 속도를 조절) - 10 > 5로 변경

40. 설정에서 motion blur 체크 해제

41. 설정에서 lumen 을 제거해줘도 된다(None)

42. 다시 블루프린트로 가서 Camera에 Projection Mode를 Orthographic 으로 해주면 2D에 유리(원근감 제거, 모든 물체들 크기가 보는 시각에 따라 안달라지고, 기존 크기 동일)

43. 게임에 맞게 꾸미기.

728x90