UE4 Chapter 3-1. 플레이어 캐릭터 : 기본 이동
카테고리: UE4 Lesson 1
태그: UE4 Game Engine
인프런에 있는 황대희님의 언리얼 엔진4 3D 횡스크롤 게임 만들기 강의를 듣고 정리한 필기입니다. 😀
언리얼 엔진 공식 문서 https://docs.unrealengine.com/ko/index.html
Chapter 3. 플레이어 캐릭터
🔔 프로젝트 생성
- 레벨은 Default로
- 큐브를 추가해준다.
- 레벨 저장하기
- 이름은 “MoveCubeActor”
🔔 기본 이동
Actor
는 기본적으로 static 한 움직임이 없는 고정된 메시이다. 기본 구조물로 많이 사용 됨.
블루프린트로 큐브 이동시키기
- 큐브 액터를 static 에서 Movable로 바꿔주어야 이동 가능하다는 것에 주의하기
큐브에 블루프린트 스크립트 추가
- 디테일 창에서 블루프린트(클래스 블루프린트) 스크립트를 큐브에 추가할 수 있다.
- “MoveCubeBP” 라는 이름의 블루프린트를 추가
A 키 누르는 순간(Pressed)마다 큐브 이동시키기
“MoveCubeBP” 큐브에 추가한 블루프린트의 이벤트 그래프에서 큐브가 이동하게끔 스크립팅하기!
- “MoveCubeBP” 큐브에 추가한 블루프린트 스크립팅이니,
self
는 이 “MoveCubeBP” 큐브가 된다.
- 액터 Input 활성화하기
-
- 기본적인 액터 입력 활성화 방법이다.
- 기본적으로 언리얼은 액터가 Input을 받아들이는게 비활성화 되어있는 상태라 키보드 입력을 받으려면 이를 활성화 시켜주어야 한다.
BeginPlay
실행 핀에Enable Input
(Input 활성화)를 연결해준다.- 게임이 시작되면 이 “MoveCubeBP” 큐브의 입력이 활성화된다.
Get Player Controller
는 플레이어 컨트롤러를 리턴하는데 이를Enable Input
의 Player Controller 핀에 연결해준다.- 플레이어 컨트롤러는 플레이어에게서 받은 입력을 어떤 동작으로 변환하는 함수성을 구현하는, 사람 플레이어의 의지를 나타낸다.
-
A
키 누르는 순간맏 y 축으로 -2 씩 큐브 이동시키기A
키에 대한 레퍼런스 노드 추가- 우클 - Input - 키보드 이벤트 -
A
선택
- 우클 - Input - 키보드 이벤트 -
A
키의 Pressed 핀에Set Actor Location
노드 추가- 이제
A
키를 누르면New Location
위치로 이동하게 될 것이다.
- 이제
GetActorLocation
(현재 위치)을 추가하고 이의 리턴 핀을Vector + Vector
노드에 연결한다.Vector + Vector
노드에 Y 값에 -2.0 을 입력한다.- 현재의 위치에서 (0, -2, 0)이 더해진 값(Vector) 결과를
Set Actor Location
의New Location
핀에 연결해준다.- 현재 위치에서 (0, -2, 0)이 더해진 결과인 위치로
A
키를 누를 때마다 타겟인self
(“MoveCubeBP”)가 그 위치로 이동하게 된다.
- 현재 위치에서 (0, -2, 0)이 더해진 결과인 위치로
A, D 키를 누르는 동안 큐브 이동시키기
누르는 순간과 떼는 순간은 언리얼에서 지원해주는데 누르는 동안은 지원해주지 않음. 따라서 직접 Axis를 추가해야 한다.
- Axis Mapping 추가하기
- 블루프린트창 - 편집 - 프로젝트 세팅 - 입력 - Axis Mappings + 추가 버튼 누르기.
- 다음과 같이 추가 (이름은 “LeftRight”)
- A 키를 누르면 Axis Value 로 -1.0 을 리턴하고
- D 키를 누르면 Axis Value 로 1.0 을 리턴하고
- 아무 키도 누르지 않으면 Axis Value 는 0.0을 리턴하는
- “LeftRight” 이벤트를 이제 노드로 추가할 수 있다!
- 다음과 같이 추가 (이름은 “LeftRight”)
- 블루프린트창 - 편집 - 프로젝트 세팅 - 입력 - Axis Mappings + 추가 버튼 누르기.
- 위에서 추가한
LeftRight
이벤트 노드를 추가한다.- 이런 Axix Mapping 이벤트 노드는 매 프레임마다 실행이 된다
- 따라서 ‘누르는 동안’ 이런거 구현하기 좋다.
LeftRight
노드의 실행핀과SetActorLocation
실행핀을 연결한다.
- 이런 Axix Mapping 이벤트 노드는 매 프레임마다 실행이 된다
LeftRight
이벤트 노드는 매 프레임마다 실행이 되며 아무런 입력이 들어오지 않을 때는 0.0 을 리턴하고 A 입력이 들어오면 -1.0, D 입력이 들어오면 1.0을 리턴한다.Vecotr * float
노드를 추가하여Vecotr * float
노드의 float인 B value 핀과LeftRight
의 Axis Value (1.0 혹은 0.0 혹은 -1.0 셋 중 하나의 float 값을 가짐) 핀을 연결해준다.- A value 로 (0, 5, 0)을 입력해주면 이제 매 프레임마다 Vecotr3(0, 5, 0) 에 float인 Axix Value 가 곱해진 결과 값이 리턴되게 된다.
- 매프레임마다 아무 키도 누르지 않으면 (0, 0, 0)
- 매프레임마다 A 키를 누르는 상태면 (0, -5, 0)
- 매프레임마다 D 키를 누르는 상태면 (0, 5, 0)
Vector + Vector
노드의 A value 핀으로 현재 위치를 리턴하는GetActorLocation
리턴 값을 연결해주고 B value 핀으로Vecotr * float
노드의 결과 리턴 핀을 연결해준다.- 매프레임마다 아무 키도 누르지 않으면 현재위치 + (0, 0, 0)
- 매프레임마다 A 키를 누르는 상태면 현재위치 + (0, -5, 0)
- 매프레임마다 D 키를 누르는 상태면 현재위치 + (0, 5, 0)
- 최종적인
Vector + Vector
노드 리턴 핀을SetActorLocation
의 New Location 핀에 연결해주면 해당 위치로 큐브가 이동하게 된다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기