미니 프로젝트

유니티 - 미니프로젝트 #2-1 : 수박게임을 따라 만들어 보자.

근본넘치는개발자 2024. 8. 30. 00:09

 

원래는 게임을 다 만든 후에 글을 작성하려고 했으나

만들어 가는 과정을 올리는 것도 나쁘지 않을 것 같아서 부족하지만 올렸다.

 

유니티로 간단하게 따라 만들어 볼 만한 게임이 뭐가 있나 찾아보다

한때 유행했던 수박게임(정확한 명칭은 Suika game)이 떠올랐고, 곧바로 시도해 보았다.

 

수박게임 유니티로 모방하며 만드는 영상

 

이전과 마찬가지로 이미지는 빙 이미지 크리에이터를 통해 만든 걸 사용했다. 

 

구조를 간단하게 설명하자면 

마우스 버튼을 클릭하면 과일이 떨어지고,

과일과 과일이 부딪히면 더 큰 과일로 변하는 게임이다.

 

최종단계의 과일을 만들어내면 게임은 승리로 끝이 나며,

가장 최종 단계의 과일을 만들기 전에 위에 보이는 검은 선에 과일이 닿으면 게임 오버되는 간단한 구조다. 

 

처음엔 BoxCollider를 벗어나면 게임오버가 되도록 구현하려고 시도하다가

검은 선과 과일이 접촉하면 OnTriggerStay를 통해 반응하도록 수정했다.

 

다음 레벨의 과일로 변하는 과정은 스크립트 오브젝터블을 이용해 이미지를 변경하는 걸로 구현했다.

 

참고했던 유튜브 채널 

https://youtu.be/eQPp0QTz4JM?si=Zr2Nbgqft5pcC7r8

 

진행하면서 겪었던 문제 사항 

1. UI 버튼 클릭과 마우스를 통한 소환 이벤트가 동시에 발생하는 문제가 발생했다.

-> IsPointerOverGameObject라는 것을 알아내 문제를 해결했다. 

 

https://docs.unity3d.com/kr/530/ScriptReference/EventSystems.EventSystem.IsPointerOverGameObject.html

 

EventSystems.EventSystem-IsPointerOverGameObject - Unity 스크립팅 API

Is the pointer with the given ID over an EventSystem object?

docs.unity3d.com

 

2. 과일과 과일이 충돌했을 때 합쳐지는 과정에서 하나는 사라지고,

남은 하나가 변해야 하는데 둘다 사라지는 문제가 발생했다.

 

-> 어떻게 구현해야할지 한참 고민하다 결국 유튜브 영상을 찾아보고 해결했다. (살짝 아쉬운 부분)

-> 코루틴을 활용하여 같은 레벨의 과일끼리 충돌할 시 먼저 반응한 과일에서 상대 과일의 상태를 변경하고,

WaitForSeconds를 통해 대기 시간을 주어 한쪽만 사라지도록 했다. 

 

 

개선할 부분

- 과일들의 크기 조절 추가하기 (스크립트 오브젝터블에 추가하면 금방 할 것으로 예상)

- 음악 볼륨 조절 및 UI 개선하기

- 오브젝트 풀링 적용해보기

- 응용해서 중력 수박게임 (Sputnika Game)만들기 까지가 최종 목표이다.