나 개발자 진짜 되냐?

[ Unity 뱀서라이크 게임을 만들어보자 1 ] 시작 그리고 캐릭터 이동까지! 본문

유니티를 공부해봐요!/초급이에요!

[ Unity 뱀서라이크 게임을 만들어보자 1 ] 시작 그리고 캐릭터 이동까지!

Snow Rabbit 2024. 10. 7. 22:48
반응형

 

이제 드디어

게임을 하나 만드려고 한다.

 

나는 이런 비슷한 게임을

매직서바이벌을 해보았었는데

음..

탕탕특공대로 핫했고

최근에 뱀파이어 서바이벌..

 

아!

리그오브레전드에서

집중포화를 너무너무 재밌게 했던

기억이 난다.

 

이렇듯

뱀서라이크는

주변에서 적이 몰려오는 것을

잡아내며 생존하는 게임이다.

 

 

처음부터 좌라락 만드는 과정을 하나하나 담으려고 했으나

 

이미 만드신 분의 리소스를 활용해 

이미지나 같은 거는 받아왔고

우리는 여기에

움직임을 넣고

다양하게 넣어 볼 계획이다!


그전에!

스크립트 작성에

start update 있듯

순서가 있다.

 

Awake

>

OnEnable

>

Start

>

FixedUpdate

>

OnTrigger

>

OnCollision

>

Update

>

LateUpdate ( 카메라 이동 )

 

순서이다

 

start가 시작일줄 알았는데

그거보다 먼저인 친구가 있다니..

놀랍다.

 


자! 이제 해보자

먼저 이동하게 해 볼 것이다.

 

이동하는 기본 코드를 작성해보자!

 

 

먼저 하이러키창에

빈통 만들어서

InputManager 생성!

 

다음에

Asset으로 가서

새로운 파일 생성

그 친구이름은 스크립트!

그 안에 다가 우리는 InputManager이라고

추가해 주고 코드를 작성해 보자!

 

우리는 이동이기 때문에

축을 가져와야 한다.

 

매 프레임마다 Vertical 축과 Horizontal 축을 가져오도록 작성해 보자!

 

먼저 아까도 봤지만 소수점이기 때문에 float로 변수를 만들어주어야 한다!

몇 개?!

가로세로 두 개!

 

 

start는 지워준다!

 

오타 진짜진짜조심하자!!

이렇게 변수 두 개를 만들어주었으니

 

좌표를 찾아야 한다.

 

여기 괄호 안에 아무것도 안 쓰면 0,0이 된다.

하지만 우리는 변수를 만들었으니 초기화까지 한 것이다.

 

음 이제 우리는 좌표를 정규화해주어야 한다.

 

 

왜!?

 

우리는 이동을 할 때 x축 한 칸 y축 한칸 이동할 것이다.

0.1 1.0 이렇게

하지만 둘 다 한 칸씩 움직인 대각선은 어떨까

1.1은 과연 한 칸일까?

 

아니다.

피타고라스 아저씨의 계산법으로

루트 2가 나오게 된다.

즉 1보다 조금 커진 수가 되는 것이다.

 

노우우 그럼 1이 아니잖아요!

그래서 우리는 다 1로 통일하기 위해 정규화!라는 친구를 사용해 준다.

 

정규화는 쉽다

이 코드 한 줄이면 정규화 완성!

 

 

다음에 우리는 이제 중력을 걸어놓고 이동해야하기 때문에

중력을 가져와야 한다.

 

 

getComponent로 가져오고,

rigidbody2D에

vlocity라고 써준 다음에

변수를 넣어주면 된다.

 

vlocity가 뭘까?

 rigidbody의 속도를 나타낸다.

 

velocity를 지정하면

오브젝트의 질량과 상관없이 일정 속도를 준다.

rigidbody2 d 컴포넌트가 있어야만 velocity를 사용할 수 있다.

Rigidbody2D.velocity = new Vector2(xSpeed, ySpeed);

이렇게 x, y의 속도도 지정할 수 있다.

 

 

자 다음,

속도에 조금 차등을 주기 위해 스피드라는 변수를 만들었다.

 

그러면 위로 가서 선언해 주어야겠지!?

 

 public 말고 아까 배워본

직렬친구를 써보자

 

이렇게!

 

자! 다음 유니티로 돌아가서

 

아까 만들었던 인풋 매니저에

인스펙터로 가서

리지드바디 2D하나 만들어주고

 

방금 까지 쓴 스크립트도 드래그해 준다.

 

다음에,

 

이 친구가 잘 보이는지 보기 위해

 

스프라이트 랜더러를 눌러줘

스프라이트를 야무진 그림하나로 해놓고!

 

뭔가 상하 이동이 더 부드럽게 하기 위해서

 

 

아까 코드에  Raw를 써준다.

 

아까 코드와의 차이는 뭐냐면, 

 

안 써주면

-1.0f부터 1.0f 까지라서

조금 더 부드럽게 이동이 가능하며

 

Raw를 써주면

-1 0 1 세 가지 중 하나만 반환되면서

약간 즉시 이동해야 하거나 딱딱

끊어져야 할 때 사용한다.

 

그리고!

Gravity Scale을 0으로 만들어 줘야 한다.

해보니까

양수로 하면 아래로 내려가고

음수로 하면 위로 올라간다 

ㅋㅋㅋ

중력의 힘을 이야기하는 거 같았다.

0이면 그 자리에 가만히 있는다.

 

아!

 

그리고!

아까 new Vector2해 줄 때

무조건

앞이 ho고 뒤가 ve이다

그래야 상하좌우가 안 바뀐다 ㅋㅋㅋㅋ

이상하게 움직여서 당황했다.

 

 

추가적으로!

 

앞으로 계속 get rigidbody를 해줘야 하는데

여러 번 해주기가 굉장히 타자치기도 그렇고 번거롭다.

그래서 start에서 한 번만 해줄 수 있게 할 수 있다.

 

 

 

이렇게!

 

 

간단한 이동을! 구현해 보았다.

 

다음에는 더

자연스럽고 고급지게 변경할 예정이다!

 

 

 

< 이 프로젝트는 스파르타 코딩수업에서 배운 내용을 복습 한 내용입니다. >

반응형