#2 테스트 맵 개발 및 맵 기믹 구현 [점프맵]

신지한·2024년 1월 21일
1

개발일지

목록 보기
6/8
post-thumbnail

📢 개발일지에 앞서서

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

🎮 점프맵 제작에 대해서...


저번에 이어 점프맵 개발일지를 오랜만에 작성하는데
게임개발을 하다가 사실 취업을 생각하게 되어 조금 고민하는 시기가 있었다..

사실 내가 생각하기에는 이젠 생각하는거를 구현하는데엔 2D게임에선 크게 어려움은 없었기 때문에
별생각없이 구현하다가 취업을 생각하려니까

포트폴리오로서 사용될 코드들이나 결과물들이 마땅히 없었기 때문에
디자인 패턴이나 게임 구조를 위주로 좀 관심있게 보고 공부하다가보니
자연스럽게 현재 개발하고 있는 게임에는 멀어지게 되버렸다..
뭔가 좋은 코드로 만들고싶다는 욕심이 생겨버려서..

그래서 따로 공부하다가 아무래도 나혼자 진행하는 프로젝트도 아니다보니
우선 계속 결과물을 내면서 계속해서 어떻게 하면 좋게 만들 수 있을지에 대해서 고민을 해보기로 했다

이번에 구현한 내용은 맵에 사용될 몬스터, 함정 그리고 몇가지 기믹
그리고 테스트용 맵을 구현하였다

📚 현재 개발 진행 상황

📌 맵 구현 및 테스트 맵 생성

맵 제작에 있어서 원래는 오브젝트를 통해 position값을 세부 조정해서
점프맵 레벨링을 하려고 하였는데 오브젝트로 하지 않아도 Tilemap으로 블럭을 찍었을 때도
충분히 난이도 조정이 가능하단걸 알게되었다
오히려 Tilemap으로 찍으니 세부적인 블럭 공식도 낼 수 있다는 점(ex: 아슬아슬하게 도착할 수 있는거리)


현재 기능 구현을 위해 테스트맵을 생성하였고 테스트맵도 앵간 어렵게 만들어뒀다
중간보스정도..?

이제 맵들은 계속해서 찍어낼 수 있도록 만들 예정이고
나중에는 GeometryDash처럼 유저들이 월드 에딧으로 맵을 커스터마이징 할 수 있도록 구현할 계획인데
이를 어떻게 만들지 생각하면서 맵을 제작하도록 해봐야겠다

📌 맵 구현 및 테스트 맵 생성

👉 박쥐

박쥐는 GIF와 같이 특정 위치를 왔다갔다 하도록 구현했다
오브젝트 컴포넌트에 StartPos(시작위치)랑 EndPos(를 입력시키면 맵을 시작 시 해당 위치를 반복하도록 설정했다

아마 제일 기본이 되는 몬스터가 되지 않을까싶다

그리고 현재 피격 파티클도 구현되어져 있는데 이는 연출의 문제로
파티클을 제외하고 이펙트를 넣을지 말지에 대해 좀 더 회의가 있어서
일단 보류된 기능인데 현재 움짤엔 포함되어져 있다

👉 가시함정

가시함정은 타이밍에 맞춰서 밟도록 의도된 함정이고
가시의 속도나 딜레이 되는 타이밍을 오브젝트 컴포넌트에서 조정할 수 있어서
GIF와 같이 타이밍에 맞게 올라갈 수 있도록 연출할 수 있다

👉 캐논

캐논은 GIF같이 일정시간마다 탄알을 쏜다 움짤이 이상하게 찍혀서 끊긴다

캐논은 프로젝타일의 속도, 다음 쏘는 시간가지의 딜레이, 총알의 사거리 등을
오브젝트 컴포넌트에서 조정 가능하다



적 클래스들을 어떻게 효율적으로 관리할까에 대한 고민을 좀 많이 하게되었는데
우선은 기능 구현을 우선으로 생각해서 현재는 각각의 적마다 클래스를 구현하였다
Bat.Class, Canon.Class, Trap.Class... 앞으로 적이 추가될때마다 이런식으로 구현할지
아니면 효율적으로 관리할 수 있는 방법이 있는지에 대해선 좀 더 고민을 해봐야겠다
(공부하고 있는 FSM은 해당 방식에 적절하지 않다는 생각이 들었다)

📌 파티클 효과 구현

파티클 효과는 기각되겠지만 구현을 하는데 조금 고민을 했었던게 있기에
기록을 남기고자 한다

파티클은 따로 디자인을 받는게 아닌
그냥 Square 오브젝트를 0.01 Scale로 줄인 프리팹으로 사용하였으며
피격(?)된 오브젝트에 따라 색깔과 갯수가 변한다(적, 별, 코인, 등...)

private IEnumerator CreateParticle(int mode, int count, GameObject target)
{
	// 파티클을 입력값에 따라 해당되는 개수를 생성 후 particleClone 배열에 저장
    GameObject[] particleClone = new GameObject[count];
    for(int i=0;i<count;i++)
    {
        particleClone[i] = Instantiate(particlePrefab);
        
        // 모드에 따라 파티클의 색깔 및 생성되는 위치 수정
        switch(mode)
        {
            case 1:
                particleClone[i].GetComponent<SpriteRenderer>().color = Color.red;
                particleClone[i].GetComponent<Transform>().position = gameObject.transform.position;
                break;
            case 2:
                particleClone[i].GetComponent<SpriteRenderer>().color = Color.yellow;
                particleClone[i].GetComponent<Transform>().position = target.transform.position;
                break;
            case 3:
                particleClone[i].GetComponent<SpriteRenderer>().color = Color.white;
                particleClone[i].GetComponent<Transform>().position = target.transform.position;
                break;
        }
        // 파티클을 랜덤각도로 쏨
        particleClone[i].GetComponent<Rigidbody2D>().AddForce(Random.insideUnitCircle * 0.2f, ForceMode2D.Impulse);
    }
    
    // 파티클이 서서히 사라지도록 함
    while(true)
    {
        Color temp = particleClone[0].GetComponent<SpriteRenderer>().color;
        if (temp.a == 0) break;
        temp.a -= 0.1f;
        for(int i=0;i<count;i++)
        {
            particleClone[i].GetComponent<SpriteRenderer>().color = temp;
        }
        yield return new WaitForSeconds(0.05f);
    }
	
    // 파티클 제거
    for (int i=0;i<count;i++)
    {
        Destroy(particleClone[i]);
    }
}

실제 적용했을 때 파티클이 제거가 안되는 문제가 있었는데
해당 기능이 기각돼서 제거부분은 조금 더 수정될 여지가 있다

해당 기능을 코루틴으로 복잡하게 구현했는데
사실 이런 기능은 에셋 스토어에서 Dotween을 사용하면 쉽게 구현된다는 사실을 알고있지만...(API가 진짜 깡패다)
그냥저냥 구현했다... 그냥 이게 익숙하기도 하고 생각한대로 만드는게 좀 편하기도 하다

🤔 앞으로의 계획


현재 추가될 적 몇개를 제외하곤 게임 플레이에 필요한 대부분의 기능은 거의 만들어졌다고 봐도 된다
사실 이정도로 구현해도 될정도로 간단한 기획이긴 했다
근데 내가 게을러서...

잠깐 개발을 멈췄던 이유도 포트폴리오로 사용하기 위해서 조금 더 좋고 효율적인 코드로 만들까해서
공부를 했지만 정작 구현할 때 어떤 걸 적용해야하는지에 대해 잘 모르는거도 좀 흠인거같다..

맨땅에 헤딩하듯 머리박으면서 구현하다보면 좀 더 효율적인 방법을 찾을 수 있지 않을까 싶다
다음은 맵들을 좀더 만들고 이펙트같은걸 조금 더 수정할 거 같다

profile
게임 개발자 지망생

1개의 댓글

comment-user-thumbnail
2024년 3월 15일

이 게임 정말 재밌어요.
아니? 재밌을 거 같아요.

답글 달기