본문 바로가기

MakeNote

Project - 남겨라 프로젝트 +5일차

2022.06.28

 

-TODO-

최종 목표 세우기

플레이어/적 데이터 엑셀 기획

오브젝트 풀링 구현


적 데이터 엑셀 기획

 

이번엔 정말 다른 분야를 한번 해보았습니다. 바로 엑셀 - 시스템 기획 부분입니다. 내가 만들고 싶은 게임의 방향성이나 컨텐츠처럼 아이디어가 툭 툭 떠오르는 요소들로 틀을 짰다면, 이번에는 안에 심장처럼 내부 요소를 기획해야 할 차례 입니다. 엑셀을 전문적으로 다루지 못해서 저도 엑셀에 대해 조금 공부해 보았습니다. 게임을 만들면서 자신의 능력을 향상 시킨다는 취지에 맞는 프로젝트 인것 같아서 기분이 좋습니다 :-)

 

자 서론이 길었습니다. 먼저 엑셀로 우리가 이번에 기획 할 내용은 몬스터의 스탯 수치, 스테이지당 획득 경험치/골드 계산, 플레이어 업그레이드 비용 계산, 몬스터의 정보를 담고 있는 도감 이렇게 기획을 해볼 예정입니다. 

 

- 엑셀의 대한 세부적인 내용은 다루지 않을 예정입니다 ! -

 

엑셀의 몬스 기획 정보 시트입니다.

 

 

스테이지 처음 시작을 할 때 기본( Default ) 값인 수치들이 존재합니다. 워 뱃을 예로 들면 체력의 12, 공격력의 4 등이 기본 수치입니다. 여기서 우리는 스테이지를 진행 해 나아가는 게임이기 떄문에 스테이지당 + 수치 가 존재합니다. 그리고 종류를 나누었는데 순서대로 일반 (Common), 희귀(Rare), 에픽(Epic), 보스(Boss)의 개념으로 나누었습니다.

 

다음은 플레이어 데이터 수치 기획입니다. 플레이어는 강화 패널의 골드까지 기획을 했고, 레벨의 필요한 경험치 테이블까지 기획했습니다.

 

 

업그레이드 49Lv 에서 50Lv 로 넘어가려면 91004 골드가 필요하게 됩니다. 그리고 첫 목표인 1스테이지를 깨는 시점까지 계산을 해보았습니다. 

다음은 스테이지 기획인데 내용은 스테이지에 어떤 몹이 몇마리 나오고 스테이지마다 돈을 사용하지 않았을 시, 총 획득 골드와 경험치 획득량 까지 계산을 해서 데이터 테이블로 담아보았습니다.

 

 

이렇게 기획 데이터 테이블 진행했습니다. 추후 2스테이지 몹과 스테이지 마다 또 획득 골드와 경험치를 작성할 예정입니다.


목표 달성과 설정하기

가장 중요한 목표를 설정하는 것 입니다. 먼저 이 프로젝트는 성장을 위한 프로젝트이지만 저의 첫 앱스토어 출품작이 될 예정입니다.

그러하여 가장 메인 목표는 앱스토어 출시 입니다. 다음은 개발 기간동안 목표 입니다. 무엇을 만들지, 어떤 일을 해야하는지 적어놓고 순차적으로 하나하나 해 나아갈 예정입니다.

 

이 프로젝트의 궁극적인 목표는 이 프로젝트를 유사한 게임으로 만들어보면서 유니티 스크립팅의 실력을 기르는 것을 목표로 둔 프로젝트 이므로 똑같은 게임을 출시하거나 배포하면 안됩니다. 자신이 에셋을 구하고, 응용을 하며 다른 게임으로 만들어서 출시하기를 바랍니다.

 


오브젝트 풀링 구현하기

오브젝트 풀링에 대해 한번 서술한 글이 있으므로 먼저 오브젝트 풀링이 뭔지 모르시는 분들은 글을 읽고 오시는것을 추천드립니다.

https://jinhyocoding.tistory.com/3

 

Unity ObjectPool 개념 및 실습

2021 - 10 - 24 Unity 효율적인 자원관리를 위해 ObjectPool 개념과 실습을 해보았습니다. 오브젝트 풀링이란 ? 간단하게는 오브젝트 풀을 할 곳에 오브젝트들을 미리 생성해두고 필요할때 꺼내서 사용

jinhyocoding.tistory.com

 

오브젝트 풀링을 구현하는 코드 입니다. 

 

using System.Collections.Generic;
using UnityEngine;

public class ObjectPool : MonoBehaviour
{
    public static ObjectPool instacne { get; private set; }
    private void Awake()
    {
        instacne = this;
    }

    private Dictionary<string, Queue<GameObject>> objectPool = new Dictionary<string, Queue<GameObject>>();

    public GameObject GetObject(GameObject gameObject)
    {
        if(objectPool.TryGetValue(gameObject.name, out Queue<GameObject> objectList))
        {
            if(objectList.Count == 0)
            {
                return CreateNewObject(gameObject);
            }
            else
            {
                GameObject obj = objectList.Dequeue();
                obj.SetActive(true);
                return obj;
            }
        }
        else
        {
            return CreateNewObject(gameObject);
        }
    }

    private GameObject CreateNewObject(GameObject gameObject)
    {
        GameObject newObject = Instantiate(gameObject);
        newObject.name = gameObject.name;
        return newObject;
    }

    public void ReturnGameObject(GameObject gameObject)
    {
        if(objectPool.TryGetValue(gameObject.name, out Queue<GameObject> objectList))
        {
            objectList.Enqueue(gameObject);
        }
        else
        {
            Queue<GameObject> newObjQueue = new Queue<GameObject>();
            newObjQueue.Enqueue(gameObject);
            objectPool.Add(gameObject.name, newObjQueue);
        }

        gameObject.SetActive(false);
    }
}

 

이렇게 해서 오브젝트 풀링까지 구현해 놓은 모습입니다. 다음 프로젝트 개발일지에서 풀링을 사용한 테스트 매니저로 게임의 기본적인 로직을 돌려보도록 하겠습니다.

'MakeNote' 카테고리의 다른 글

Project - 남겨라 프로젝트 +4일차  (1) 2022.06.23
Project - 남겨라 프로젝트+3일차  (0) 2022.06.15
Project - 남겨라 프로젝트 +2일차  (0) 2022.06.08
졸업 프로젝트 기획서  (0) 2022.05.25
Sub Project - Food And Slash  (0) 2021.12.30