그냥 게임개발자

개발일지_002(UE4게임)블루프린트로 템플런 게임만들기2 본문

게임개발

개발일지_002(UE4게임)블루프린트로 템플런 게임만들기2

sudoju 2021. 12. 4. 17:28

 

 

이때까지 포스트 안 한 이유는 내가 이해하고 설명해야 적기 편할 것 같더라고요.

저번에 우리가 만든 것은 타일 내에서 끝없이 달리는 블루프린트와 타일 자동생성, 자동생성 시 딜레이를 주어 destroy actor를 실행시켜 삭제를 하는 것을 했다

 

그렇다면 이제 템플x처럼 좌우로 움직일 수 있는 방식을 포스트 하려고 한다.

마스터 타일 블루프린트에 arrow 컴포넌트를 새로 추가해줬다.

arrow 컴포넌트의 역할은 플레이어가 이동할 좌표로 사용하려고 한다.

Lane 0의 좌표
Lane 1의 좌표
Lane 2의 좌표

움직일 좌표에 설정을 해주고 우리는 이제 이 좌표를 이용해 캐릭터를 움직일 것이다.

ThirdPersonCharacter블루프린트에 들어가 보면

이렇게 설정해주면 된다.

이걸 설명하기 전에

변수부터 설정하자 오른쪽 사진처럼 이 세 개의 변수만 생성해주자.

Lane과 NewLane이라는 변수의 데이터 타입은 intger이다.

LaneY는 float타입이다.

근데 이모티콘이 이상하다.

당연하다. 이것은

배열이다 배열 여러 가지 값을 넣어주기 위해 float형 배열을 만들어줬다.

자 이제 우리는 왼쪽 키를 눌렀을 때 처음 발생할 함수는

당연히 New Lane의 변수의 값을 설정해줘야죠... 왜냐 내가 가는 길이 무슨 길인지도 모르면 어떻게 캐릭터를 조종하겠는가

설정하는 방법은 이와 같다.

일단 우리는 Lane의 변수 값을 얻어온다 기본 Default값은 1로 정해준다.

오른쪽에 보면.. 다 나옴... 이걸 1로 설정해주는 이유는 무엇이냐

우리는 Lane 0, Lane 1, Lane 2로 설정해주었다.

처음 우리가 스폰하는 위치는 Lane 1의 자리에 스폰하도록 되어있다.

즉 가운데다

아무튼 Lane 1 이 초기 자리니 값을 1로 설정해주고 int + int 노드를 넣어준다.

즉 그냥 a와 b라는 변수를 더해주는 노드라고 보면 된다.

다만 정수만 더해준다

그렇다는 건 우리는 Lane 하고 -1을 더할 거다.

왜 -1이냐? 간단하다

Lane 0 이 왼쪽 레인이고 Lane2 가 오른쪽 레인이니 당연히 왼쪽 버튼을 누르면 왼쪽으로 가야 한다

ex) 기본위치 : Lane 1 = 기본 값 1-> 왼쪽을 눌렀다! -> Lane 1 - 1 = Lane 0으로 가게 설정

이런 로직으로 짤 예정이다.

 

 

오른쪽도 똑같이 설정해주어야 한다.

자 이제 Clamp가 무엇이냐?

설명을 보자.

A 및 B사이에 클램핑 된 값을 반환한다.

클램핑이 뭔지 알아보자.

즉, Clamp는 내가 받은 값을 최소치와 최대치를 정해주는 역할을 한다.

그렇다는 건 우리의 최소치는 Lane0 최대치는 Lane2라는 것을 알 것이다.

자 이로써 값을 받아 불러오는 것은 완성 이것을 이제 움직여야한다

그럼 타임라인을 추가하자.

타임라인의 이름을 나는 Lerp Timeline이라고 설정해주었다.

타임라인의 역할은 무엇이냐

블루프린트 내에서 간단한 시간으로 기반한 애니메이션을 디자인할 수 있는 특수 노드이다.

0부터 0.05시간 동안 애니메이션을 만들어준다고 보면 된다.

우리는 시간을 설정할 것이기 때문에 Float 트랙을 추가했다.

자자 이걸로 문 열기, 불 켜고 끄기, 등 여러 가지 애니메이션 조작을 가능하다고 한다.

우리가 왼쪽 or 오른쪽 키를 눌렀을 때 캐릭터가 움직일 시간을 정해준다라고 보면 된다

바로 다음으로 넘어가 보자.

 

이 왼쪽 이벤트를 통해 타임라인 동안 SetActorLocation을 설정한다.

SetActorLocation? 직역하자면 액터의 위치를 설정!

그렇다는 건 이제 조금은 이해가 가나?? 왼쪽 키를 누르면 0.05초라는 시간이 가는 동안 SetActorLocation을 설정하는 거다!

 

이해하도록 노력해보자.

 

그럼 이것을 어떻게 설정해줄 것이냐.

액터의 위치를 설정해보자.

우리는 Capsule Component의 변수 값을 얻어올 것이다.

 

마우스 갖다 대면 설명이 자. 세. 히 나와있다.

지금 우리가 코딩하고 있는 블루프린트는 ThirdPersonCharacter에 있는 이벤트 그래프이다.

그렇다는 건 우리가 움직이려고 하는 것은 ThirdPersonCharacter 즉,

이 귀여운 언리얼 캐릭터이다.

 

지금 보면 Capsule Component의 속해있는 컴포넌트가 뭐뭐가 있지?

Arrow Component와 mesh, CameraBoom, Follow Camera가 있다.

이것을 전체 다 움직이려면 뭐해야 할까?

Capsule Component만 움직이면 다 움직이게 되어있다.

이제 이해가 갔으면 노드를 짜 보자.

자 이제 이걸 보면 이해가 갈 것이다.

Capsule Componet의 값을 Get(얻다)해와서! GetWroldLocation을 통해 X와 Z의 좌표의 값을 Set Actor Location으로 보낸다

Get World Location는 컴포넌트의 위치를 구하는 함수다.

CapsuleComponent의 값을 GetWorldLocation의 위치로 반환하여 Set Actor Location에 보내겠다는 뜻

그렇다면 나머지 좌표 Y는?

우리가 움직이는 왼쪽, 오른쪽을 누르게 되면 Y의 값을 변화하려고 만드는 거기 때문에 이것은 우리가 위에서 만든

 

이 변수들을 사용해야 한다.

Lane, New Lane, Lane Y

Lane의 값은? 1

New Lane의 값은? 0이든 1이든2다.

왼쪽을 누르면 우리는 Lane의 값을 얻어와 New Lane의 값을 설정했다.

그렇다면 만약 게임을 처음 시작했을 때 Lane의 값은 1로 시작해 그러면 왼쪽을 누르면 New Lane의 설정은 0으로 설정이 된다.

그거의 좌표를 설정해서 넣어주면 된다.

 LaneY의 값은

이렇게 설정을 해준다.

즉 0, 1, 2에 해당하는 값은 -330, 0, 320

 

이렇게 설정해주면 우리가 Lane의 값을 LaneY의 배열에 사본에다가 넣어 그리고 New Lane도 똑같이 사본으로 넣어놔.

그리고 우리는 이 값을 선형 보간을 한다.

Alpha는 

우리가 아까 설정한 타임라인에 있다.

그렇다는 건 Alpha가 0이면 A가 100% Alpha가 1이면 B가 100% 즉 이게 무슨 말이냐면 우리가 설정한 타임라인은 최소 0 최대 0.05다.

그러면 우리가 Lane의 값은 우리가 알고 있는 Character의 있는 위치다.

New Lane의 값은 우리가 왼쪽 or 오른쪽을 눌렀을 때 새로운 Lane의 좌표의 값이다.

그렇다면 우리는 Lane의 값을 A에다가 놓고 New Lane을 B에다가 놓게 되면

Timeline을 통해 Lane을 0.05초 동안 New Lane으로 선형 보간을 해준다는 거다.

그러면 원래 y는 0이었던 캐릭터가 왼쪽을 누르게 되면 New Lane은 LaneY에 있는 0번째 배열에 들어있는 좌표 -330으로 설정이 되어 0.05초 동안 0이었던 Lane을 -330으로 선형 보간을 해주는 거다.

 

그리고 우리는 그것을 ThirdPersonCharacter의 좌표로 설정해주는 거지!

 

이렇게 캐릭터가 끝없는 레일을 달리면서 좌우로 움직이는 간단한 게임을 업데이트했다.