본문 바로가기
Unity

2024/04/03 Unity 미니 프로젝트 Roll A Ball 게임 만들기4

by 민정e 2024. 4. 3.

앞선 내용들은 아래 링크를 누르면 볼 수 있다.

 

Roll A Ball 게임 만들기 1

Roll A Ball 게임 만들기2

Roll A Ball 게임 만들기3

 

Debuf(빨간 코인)을 먹었을때, 점수가 깎이고 튕겨져 나가게 설정하기

Player Contoller 스크립트의 OntriggerEnter항목에 if문을 추가해준다.

Debuf를 먹으면 점수가 10점 감소하고, 튕겨져 나오도록 설정을 해주었다.

왼쪽부터 폭발힘, 폭발 위치, 폭발반경, 위로 들어올려지는 정도, 힘의 적용 방식 이다.

빨간 코인의 이름을 Debuf로 설정해준 후, Debuf 태그를 생성, 적용한다. Debuf 오브젝트를 Prefab에 드래그 해서 새로운 Prefab을 만들어주고 적용해준다.

 

적용하면 다음과 같이 된다.

 

동작 영상

 

조금 더 드라마틱하게 만들기 위해 코드를 다음과 같이 수정 해 주었다.

 

스크립트를 저장하고 게임을 실행시켜보면 debuf에 부딪쳤을 때, 공이 부딪친 방향의 반대 방향으로 크게 튕겨져 나오는걸 확인할 수 있다.

 

Player 점프 기능 만들기

player controller 스크립트에 다음과 같이 작성한다.

 

점프키가 눌렸는지 안눌렸는지 확인해주기 위해 jump항목을 생성한다.

player가 땅에 닿았는지 안닿았는지 확인해주기 위해 isGrounded항목을 생성해준다.

OnJump 함수의 if문을 활용해 player가 땅에 닿였고, 점프키를 눌렀을때 점프가 되도록 코드를 작성해준다.

 

 

점프가 잘 된다.

Respawn기능 만들기

player controller 스크립트에 다음과 같이 작성한다.

특정 높이 이하로 떨어지면 기존 위치에 리스폰 되도록 설정하였다.

player 오브젝트가 특정 높이보다 아래로 떨어졌을 때 바로바로 리스폰이 되어야하므로 Respawn함수를 Update함수안에 넣어준다.

 

리스폰이 잘 된다.

 

하지만, 위치는 초기화가 되지만, 속도가 초기화 되지 않아 플레이어가 진행방향으로 움직이게된다. 따라서 리스폰 될 때 속력도 초기화 시켜줘야한다.

 

 

rb.Sleep() 함수를 사용해서 속도도 초기화 시켜 주었다.

 

아주 만족스럽다 ^-^

 

 

Stage 마무리

이제 게임을 좀 제대로된 stage로 만들어 마무리를 해 볼것이다. 필자는 앞쪽에 추가적으로 길을 설치해 주었고, 그 끝에 깃발을 꽂아 goal을 만들었다. 중간에 debuf도 하나 놓아주어 게임을 좀 더 긴장감 있게 해주었다.

 

 

이제 깃발에 닿으면 Stage1이 끝나도록 만들어 줄것이다. 앞서 Lose 패널을 만들었던것처럼 Win 패널을 만들어주고, Next Stage 버튼도 만들어주었다.

 

 

이제 깃발에 닿았을 때 win 패널이 작동해야하므로, PlayerController의 OnTriggerEnter 함수를 활용하여 조건을 작성해준다.

 

이겼을 때 타이머가 더이상 작동 하지 않아야 하므로 타이머를 끄기 위한 내용도 적어주었다.


깃발은 cylinder와 plane을 합쳐서 만들었다. 깃발을 구성하는 오브젝트들을 한 부모 오브젝트에 넣어주고, 이름을 Flag라고 해주었다. 하지만 이렇게만 하면, Flag에는 Collider가 없기 때문에, Trigger 충돌 감지 설정을 해줄 수 가 없다.

따라서 add component를 해 주고, Box Collider를 추가, 원하는 사이즈로 조정해 주고 Is Trigger에 체크를 해주었다.

 

 

이제 게임을 실행하여 플레이를 해보면, 깃발에 닿았을 때 win 패널이 작동 하는 것을 볼 수 있다.