Post

[Jem Clash] 개발일지 #1 - 프로젝트 생성

[Jem Clash] 개발일지 #1 - 프로젝트 생성

프로젝트 설명

해당 프로젝트는 제3회 UNIJAM에서 제작한 게임에서 영감을 얻어, 코드를 더 효율적으로 작성하고 다양한 기믹을 추가하여 만든 게임입니다

유닛들을 소환하거나 업그레이드하여, 상대의 기지인 넥서스를 공격해 파괴하는 것이 게임의 목표입니다

스크립트 설계

우선 게임에 필수적으로 들어가야 할 오브젝트들과, 각각의 오브젝트를 관리하는 스크립트를 분류했습니다

게임잼 때 그냥 머릿속으로 대충 그려놓고 시작했더니, 후반부로 갈수록 머리가 터질 것 같더라고요

현재 가장 필요한 스크립트들 위주로 분류했고, 기능을 추가함에 따라 스크립트가 또 추가될 수 있습니다

높은 확률로 아주 많이 추가될 것 같네요 하하

0. 관리자

  • GameManager: 게임 전체를 관리합니다
  • PoolManager: 유닛 풀을 관리합니다

1. 플레이어

  • PlayerStats: 플레이어의 체력, 이동속도, 공격력 등의 정보를 관리합니다
  • PlayerMovement: 플레이어의 움직임을 관리합니다
  • PlayerBuff: 플레이어의 유닛 버프 능력을 관리합니다

2. 유닛

  • UnitStats: 유닛의 체력, 이동속도, 공격력 등의 정보를 관리합니다
  • UnitCollision: 유닛의 충돌을 관리합니다
  • UnitMovement: 유닛의 움직임을 관리합니다
  • UnitSpawner: 유닛의 소환과 초기화를 담당합니다
  • UnitData: 유닛의 정보가 담긴 Scriptable Object입니다
  • UnitManager: 유닛 전체를 관리합니다

3. 넥서스

  • Nexus: 넥서스의 체력, 충돌을 관리합니다
  • NexusInteract: 넥서스와의 상호작용을 관리합니다

게임 초기 구성

우선 게임의 기본이자 핵심이 되는 유닛 생성을 구현해 주었습니다

유닛들끼리는 충돌하고, Bounciness를 0으로 설정하여 통통 튀는 효과를 넣어주었는데, 시간이 지남에 따라 유닛 숫자가 많아지며 점점 정신없어지도록 하려고 합니다

Image

간단하게 동일한 숫자의 유닛을 서로 다른 스폰 포인트에서 소환하도록 하고 테스트해 봤는데, 결과물이 마음에 드네요

다만 유닛 크기가 생각보다 커서, 나중에 크기 조절을 해야 할 것 같습니다

Image

유닛의 데미지와 체력을 설정해 주고, 다시 테스트해 보니 시간이 조금 지나니까 몇 개 안 남는 모습을 확인할 수 있습니다


다음으로 플레이어 캐릭터를 간단하게 구현했습니다

플레이어는 WASD 키를 이용해 캐릭터를 조작할 수 있으며, 캐릭터 주위에 버프 효과를 부여하는 범위가 있어서 유닛들이 진입할 경우, 특정 효과를 적용할 수 있도록 구현할 계획입니다

Image

우선 버프 범위 안에 들어간 유닛들이 초록색으로 변하도록 구현했는데, 정신없긴 하지만 뭔가 예쁘네요

눈썰미가 매우 좋으신 분들은 버그를 눈치채셨을 수도 있지만, 그렇지 않으셨다면 다행입니다 ㅎ…

현재 OnTriggerEnter2D 와 OnTriggerExit2D 함수를 이용해서 색깔 변경을 구현했는데, 이게 트리거 밖으로 나갈 때 시점에서 마지막으로 트리거에 들어온 유닛의 색깔로 변경되더라고요

그 말인즉슨 아군 유닛이 갑자기 적군 유닛으로 전향하는 불상사가 일어나는 건데, 일단 색깔 변경은 테스트를 위해 임시로 만든 기능이니 넘어가도록 하겠습니다

참고로 왼쪽에 커다란 친구는 아군 넥서스에 해당하는 오브젝트입니다


생각해 보니 제가 UI가 들어갈 공간을 안 넣었더라구요

아직 UI를 어떻게 만들지는 확정 짓진 않았지만, 일단 ‘팔라독’과 ‘냥코대전쟁’의 UI를 참고했습니다

Image Image

오랜만에 게임 화면 보니까 추억이 돋네요

아무튼 아래와 같이 UI를 배치해 보았습니다

Image

UI 공간을 마련하다 보니 자연스레 오브젝트 크기들도 줄여야 했는데, 이쪽 편이 더 예쁘고 자연스러운 것 같네요

테스트용으로 넥서스에 체력 텍스트도 추가했습니다

화면 왼쪽 위에 생긴 네모 2개는 다음에 기능을 소개하려고 하는데, 사실 UI를 잘 관찰하면 어떤 역할인지 알 수 있긴 합니다 ㅎ…

이렇게 게임의 기초적인 틀을 잡았고, 다음에는 몇 가지 기믹들을 추가해서 포스팅에 소개해 보려고 합니다

일단 현재 계획 중인 것은 화면 내에 있는 모든 유닛의 이동 방향을 바꾸는 기믹, 화면 내 랜덤한 공간에서 폭죽을 터뜨리듯이 유닛을 소환하는 기믹, 넥서스를 추적하는 기믹 등등… 여러 가지가 있지만 아마 구현하기 쉬운 것들 먼저 만들 것 같아요

그럼 다음 포스팅 때 뵙겠습니다 👋

(수정)

포스팅 확인해보니 제목과 표가 제대로 적용이 안되더라고요..?

원인을 알기 전까지 당분간 표는 사용하면 안 될 것 같습니다


게임 이미지 출처

팔라독: https://m.edaily.co.kr/News/Read?newsId=01725286599664384&mediaCodeNo=257

냥코대전쟁: https://www.bluestacks.com/ko/blog/game-guides/the-battle-cats/ngw-beginners-guide-ko.html

This post is licensed under CC BY 4.0 by the author.