#1 새로운 게임 개발 시작 [점프맵]

신지한·2023년 11월 27일
0

개발일지

목록 보기
4/8
post-thumbnail

📢 개발일지에 앞서서

본 게임개발일지는 본인이 게임개발에 참여한 게임에 대한 얘기이며
게임개발에 느낀점이나 시행착오 등을 기록하기위해 작성된 글입니다
공부해나가는 입장으로서 부족한점이 많아 이해해주시면 감사하겠습니다

🎮 새로운 게임에 대해서...


이번에 저희 팀에서 픽셀 포커 디펜스의 후속작으로 게임을 하나 만들기 시작했다
장르는 점프게임을 중점으로 하는 플랫포머 게임이고 픽셀포커디펜스 이후에 후속작에 대한 갈망도
있었기에 뭔가 기획적으로 무겁지 않은 간단한 게임을 하나 만들기로 하였다

처음 기획부터 단순한 시스템에 부담없이 즐길 수 있는 게임을 만들기를 목표로 하였기에
아직 계속해서 기획을 보충하고 수정해나갈 과정이지만 초기 기획은 간단하게 이루어졌다
이번에도 모바일 게임이고 전작인 픽셀포커디펜스와는 다르게 무료게임으로 생각 중

이번 게임은 픽셀포커디펜스에서보다 좀더 개발에 제 비중이 좀더 커서 게임 개발하는 과정을 일지로
간간히 남겨볼 생각이다!

📌 현재 개발 진행 상황


이녀석이 이번 게임의 기본 주인공이 될 캐릭터다 MSGames(Minimal Square Games)에서 아트를 담당하는 친구는 이런 도트를 뚝딱뚝딱 잘 찍어낸다 요즘 1인개발로 게임기획 하는 과정에서 컨셉아트를 그리고있는데 보통 쉬운일이 아니더라구요 ~~역시 아트는 위대하다~~

우선 전작인 포커디펜스는 유저가 따로 하나의 캐릭터를 조작하는 게임이 아니였기에
해당 장르에 대한 사전 공부가 필요하여 게임개발 유튜버 골드메탈님의 플랫포머 강의를 참고했다!

>> 골드메탈님 유튜브 https://www.youtube.com/@goldmetal

골드메탈님 유튜브는 게임개발에 대한 설명을 알기쉽게 설명해주셔서 초기 공부에 도움이 많이 되는거같다
최근에 풍월량님 팬게임 개발하시는 과정 계속해서 보면서 저의 1인개발 기획에도 많이 참고가 되었다


하지만 기초는 기초대로 도움이 많이 되었지만 실제 게임 개발에 있어서
추가 및 보완할 부분들이 있어 해당 내용에 관한 내용을 작성하고자 한다!

우선 게임이 플랫포머 점프 게임임에 있어서 정확한 컨트롤이 요구되어야 한다 생각들었기에
유닛의 모션, 물리력, 컨트롤에 신경을 좀더 쓴거같다

인코딩 과정에서 프레임드랍이 좀 생김..


우선 개발을 함에 있어서 중점적으로 한건 플레이어의 이동에서 예외처리를 해줘야할 사항이 생각보다 많았다.
강의에서 참고했던 유닛의 바닥 인식 과정은 Raycast로 유닛을 기준으로 밑으로 빔을 하나 쏴서 특정거리 미만일때 특정 동작이 수행되도록 소개되었지만
- 빔이 바닥의 collider를 감지하지 못하는 모서리에서 유닛을 걸쳐놓을경우
- 위의 경우에서 유닛을 점프했을경우

위의 경우에 Raycast가 바닥을 감지하지 못하여 생기는 문제들이 많았고

더블점프를 구현하는 과정에서

- 속도가 0일때 jumpCount를 초기화하도록 하였는데 착지뿐만 아니라 위에 부딪혔을때도 속도가 0이될 경우
- 점프도중 뿐만 아니라 jumpCount가 1일경우 낙하하는 과정에서도 점프를 활성화 해야하는 경우

등등의 문제들이 해결과제로 생겨났었다

해결방법은 의외로 간단했다. 뭐든 해결방법은 존재하는거같다 내가 모르고있을뿐...
이런 플랫포머 게임에선 이런방식이 많이 차용되고 있는거 같았다
이는 기존에 했던 Raycast로 빔을 쏘는 방식이 아닌 BoxCast, SphereCast, CapsuleCast등의 방식을 쓰는것이다

📌 Raycast의 다른 버전으로 Collider 체크하기

앞서말했던 문제점은 캐릭터를 중심으로 선 하나로만 밑에있는 오브젝트의 collider를 탐지하려고 하였기에 생긴 문제들 이였다.

위 과정에서 그럼 캐릭터의 collider의 경계에서 왼쪽끝과 오른쪽끝에서 빔을 아래로 쏘면 어떨까라는 생각을 하였다가

collider의 크기만큼의 box혹은 형태로 빔을 쏠수는 없는걸까? 하는 생각에

찾아보다가 다음과 같은 기능을 발견하게 되었다

이미지 출처: 헬린이 프로그래머 넋두리 (https://twosouls.tistory.com/20)
위 블로그에서 참고했었는데 이미지를 한눈에 보기좋게 설명해주셔서 출처를 밝히고 사용합니다🙇‍♂️

위의 그림과 같이 오브젝트의 형태로 빔을 쏠 방법이 있었던 것이다! (빔의 사이즈는 임의로 조정 가능)

//Landing Platform
if(rigid.velocity.y == 0) {
	anim.SetBool("isJumping", false);
	RaycastHit2D rayHit = Physics2D.BoxCast(collider.bounds.center, collider.bounds.size, 0f, Vector2.down, 0.2f, LayerMask.GetMask("Platform"));
	if ((rayHit.collider != null && rayHit.distance < 0.015f) || jumpCount == 3) {
		jumpCount = 0;
	}
	anim.SetInteger("jumpCount", jumpCount);
}
else {
	anim.SetBool("isJumping", true);
}

해당 코드는 코드중에 BoxCast가 사용되는 부분을 일부 가져온것이다
BoxCast의 파라미터로는
BoxCast(Vector3 center, Vector3 haftExtents, Vector3 direction, Quaternion orientation, float manDistance, int layerMask, queryTriggerInteraction)이고
https://docs.unity3d.com/ScriptReference/Physics.BoxCast.html
파라미터는 다음과같다 자세한건 유니티 공식문서를 참고해보자

그리고 유니티의 rigidbody로 물리력을 다뤄보는게 처음이기도 했는데
이번 개발을 하면서 어떤식으로 동작하는지 좀 감을 잡게 된거같다

현재 진행상황으로는 점프랑 피격모션까지 진행되었는데 하는 과정에서 구조적으로 최적화할 방법을
계속해서 생각해보게 될거같다

🤔 앞으로의 계획


보완할 부분은 계속해서 보완해나가겠지만 현재 테스트용 Scene에서 플레이어의 모션은 어느정도 갖춰졌고 이후에는 맵 설계 및 레벨 조정, 타일 및 적 구현으로 진행되어 나가지 않을까 싶다

개발일지는 처음 써보는데 중간중간 기록 남기고 이슈가 생길때마다 작성할거같다
병행해서 1인개발 하는 게임도 개발일지를 남겨봐야겠다

profile
게임 개발자 지망생

0개의 댓글