본문 바로가기
Unreal

『인생 언리얼 5 프로젝트 교과서』 2.2 프로토타입 버전 제작하기 복습용 feat. 벡터의 정규화

by 우타미 2025. 2. 12.
728x90

지금 5트째다. 
책대로 따라하다 4트만에 성공했고 지금은 적군마다 다르게 점수 줄려고 하다가 버그 생겨서 5트째인거임

 

1. 환경 구성

일단 스타터팩 들고 프로젝트 제작한 후 Maps 파일에 empty level 만들어서 저장했음
BP_GameModeBase를 만든 후 기본 게임모드 설정, 맵설정을 해주었다.
이제 카메라랑 조명을 설치해야 함 왜냐?
1. 오브젝트가 보이려면 빛이 필요하니깐
2. 디스플레이를 통해 보려면 카메라가 필요함

[Window] -> [place Actors] ->[camera Actor 드래그해서 뷰포트에 드롭] 
x축 기준으로 -2000 값을 줘서 뒤로 이동시키고
카메라 mobility 옵션은 플레이 중에 카메라는 어떠한 변동도 없으니 static 체크
카메라가 촬영을 하려면 활성화를 시켜줘야 하는데 Auto Player Activation을 [player 0}으로 지정 
이 뜻은 0번 플레이어가 생성되자마자 카메라도 활성화된다는 뜻 

조명은 태양광처럼 멀리서 오는 빛이 필요함으로 [Dirctional Light 드래드 뷰포트에 드롭] 
z 축으로 1000만큼 위로 올리고

Lux 값을 우주분위기에 맞춰서 5만큼 줄이겠다고 함


여기까진 이젠 외우겠음-_-
이제 여기서부터 빡집중 해야 함 플레이어 이동하면서부터 내가 몇 번이나 리셋했는지 눈물이 앞을 가린다.

 

2. 플레이어 이동

"아직 이해가 안 되신다고요? 일단 한번 따라 해 보면 바로 이해할 수 있으니 걱정하지 않아도 됩니다. "
라는 저자의 말은 구라였고요. 

BP_Player(Pawn 클래스)로 생성해 주었다. actor < Pawn < Charactor  우로 갈수록 확장된 클래스이다. 
사용자 입력을 받기 위해 pawn으로 생성해 준 것 하지만 점프, 비행 앉기 etc... 기능은 필요 없으니 caracter을 만들 필요는 없다. 

프로토타입이니 일단 큐브로 하나 만들어 주자 나중에 변경할 예정이다. 
언리얼 5부터는 enhanced input 방식이 추가되었다고 한다. 이걸 배운다고 하니 일단 해보자

 

일단 Input Action 파일을 만들어준다. 키 입력값은 (좌, 우). (상, 하)을 받기 위해  float 타입으로 IA_Hrizontal, IA_Vertical을 생성해 준다. float 타입으로 받을 것입니다 라고 말하는 과정임
말했다면 그 타입을 실제로 입력받는 물리적인 장치와 대응이 필요하다. 그게 IMC(Input Mapping Context)가 해준다. 
파일을 만들어 연결해 보자

대충 이런 느낌이라는 뜻

Input mapping Context 파일에서 IA 파일들을 할당해 준다. 
D, A, W, S 중 음수 할당 할 친구들 A, S는 Negate를 설정해 준다.

키보드로 입력받은 정보를 player Controller를 통해 불러온다. 바인딩을 위해 Enhanced Input Local Player Subsystem 노드를 연결하고 IMC파일에 설정해 둔 것을 subsystem이랑 연결

키보드로 입력받은 값을 저장하기 위한 변수를 만들어준다.

Input Action으로부터 데이터를 변수에 저장하는데 키를 누르는 동안예 값 저장, 키에서 손뗐을 때 1회 저장 
SET으로 받아준다. 만약 키에서 손을 떼었을 때 0의 값을 저장받지 못한다면 플레이어는 키에서 손을 떼어도 계속 움직이게 된다.

먼저 actor의 위치를 받아옴 [Get Actor Location] + 움직이는 값 = Set Actor Location
이때 주의해야 할 점은 받은 값을 속도(벡터)로 만들어주고 make vector을 통해 사선으로 이동 시 √2가 되지 않도록 Normalize 해준다.
MovwSpeed 속도조절을 상수가 아닌 변수로 받는 이유는 수정하기 편하게
각 컴퓨터마다 프레임 속도가 다름으로 Delta 단위기간 동안 소요된 양을 곱해주면 된다.

3. 벡터의 정규화

D를 누르면  Horizontal 값에 1이 들어간다. 
W를 누르면 Vertical 값에 1이 들어가고 
둘을 동시에 누른다면 벡터+벡터 √2가 되는 것 
그럼 내가 생각한 1의 스피드가 아닌 1.414.... 의 속력을 가지게 되는 불상사가 생긴다는 것
그래서 백터의 정규화가 필요하다는 것이다. 

 


사담


그림판으로 괴발개발 써놓아서 이해가 잘 될련지 모르겠다.
다음번엔 태블릿에 이쁘게 그려봐야지..^^

오늘 점심에 멋쟁이올리브랑 같이 샌드위치를 먹었는데 논어 이야기 나누면서 행복에 대해 다시 한번 생각해 보는 날이었다. 나중에 크루즈 타면 태워준다는 허접한 소리도 했었음 화이팅하자구욤

728x90