• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

스탯 관련 질문입니다.

24.04.01 16:29 작성 조회수 182

2

강의를 보면 스킬 시스템 에디터에서 추가할 스탯을 직접 하나씩 추가해서 해당 스탯을 원하는 엔티티에 부여하는 방식인 것 같은데요.

강의에서는 모두 같은 스탯을 사용해 Hp를 하나로 공유했지만, 보통 게임들에서는 적들마다 스탯이 다 다르잖아요??

어떤 적은 MaxHp가 높고 이동속도가 느린 대신, 어떤 적은 MaxHp가 낮고 이동속도가 빠르다던가 하는 식으로요.
그러면 이 스킬시스템의 스탯을 사용하려면 Hp, 이동속도 등등 여러 스탯들을 적들마다 다 만들어야 하는건데 그러면 데이터끼리 비교하려면 스탯을 하나하나 클릭해보며 확인해야하니까 비교하기가 힘들어 레벨 디자인하기가 쉽지 않겠다는 생각이 들어서요.

그러면 굳이 스탯까지 스크립터블오브젝트로 만들어서 모듈식으로 만들 필요성이 있는지 잘 모르겠어서 질문드려요.

답변 1

답변을 작성해보세요.

1

수강해주셔서 감사합니다.

아마 Database에 대한 얘기이실 것 같은데요, 먼저 짚고 넘어가야할 부분은 Database와 Tool은 별개가 아닙니다. 이 강의에서는 Database까지 다루진 않지만 편의성의 위해서는 당연히 IO객체들을 Database나 Excel로 Export 및 Import하는 기능의 개발이 필요합니다.

먼저 원활한 설명을 위해서 제 개인 Framework(구버전)가 어떻게 동작하는지부터 보여드리겠습니다.

1. HP의 Max 값을 MAX_HP로 설정
image
이러면 HP의 최대 값이 MAX_HP의 defaultValue로 설정됩니다.

2.강의에서 학습한 StatOverride를 이용해 Entity마다 최대 HP 수치를 다르게 지정합니다.
imageimage
이를 통해 Entity마다 수치를 다르게 조절할 수 있습니다.

3.Util 기능을 통해 현재 만들어진 Stat들을 가지고 Stats Class를 자동 생성합니다.
imageimage
4.Export 기능을 통해 Entity의 각종 정보들을 쉽게 수정할 수 있도록 Excel 형태로 뽑아냅니다.
imageimage
기획자가 Excel의 내용을 수정하면 프로그래머는 Import 기능을 통해서 Data를 불러와 Tool에 적용합니다.(강의에서 학습한 Reflection을 활용)




중견 이상급이 되는 게임 개발사들은 따로 'Tool Programmer'를 채용합니다. 그들이 하는 일은 지금 보고 계신 이런 것들입니다. 대형 개발사들은 전문적으로 Database를 운영하는데 이런 식의 Tool이 왜 필요할까요?

대규모 게임을 개발해보면 유저들은 볼 수 없는 수 십, 수 백개의 Stat을 만들게 됩니다. 숨겨진 Hidden Stat부터 상점이나 Event에 쓰이는 Stat까지 종류가 다양하죠. 이것들을 Database에 일일이 직접 입력한다고 가정을 해보면 매우 높은 확률로 입력 실수가 발생할겁니다. 사람이니까요. 거기다 Database를 왔다갔다해야하니 Test하기도 번거롭죠. Tool이 있다면 입력된 수치에 대한 검증과 실수 방지, 빠른 Test도 가능할겁니다. 검증이 끝났다면 입력된 수치들을 Database에 Update하면 끝나는거죠.

다른 예로 Quest를 만든다고 가정을 해봅시다. Quest에는 수 많은 조건과 보상, 정보들이 들어갑니다. 이것들을 일일이 Database에 입력한다고 생각을 해보세요. 아찔해지죠. 이 Table, 저 Table 옮겨가며 수치들을 입력하다보면 Quest 하나를 만드는 것도 벅차고 실수가 발생할 겁니다. 위 얘기와 마찬가지로 Tool에서 이것저것 다 설정하고 Database로 Update한다면 훨씬 편해지겠죠. Tool은 그래서 필요한 겁니다.

좀 더 서버 주도로 만들고 싶다면, Tool에선 Test 및 설정한 Data를 Export만하고(초기 Setup) Import는 Runtime 때 이뤄지게 만들면 됩니다. 그럼 Database에서 수정한 수치가 Runtime 때 적용이 되겠죠.(실시간 Patch)

장황하게 설명을 드린 것 같은데 결론적으로 Stat을 ScriptableObject, 정확히는 IO 객체로 만든 것은 여러 설정과 Test를 쉽게 하기 위해서이고, Serialize 기능을 통해서 Stat들을 개별적으로 다양한 곳에 활용하기 위해서입니다. 우려하시는 부분은 Tool에 Database와 Excel로 Export, Import하는 기능을 추가하시면 됩니다. 그때야말로 '완전한 형태를 갖췄다'라고 얘기할 수 있겠네요.

이 강의에서 해당 내용도 다뤘으면 좋았겠지만, 제대로된 Export를 위해선 Database 구조와 정규식에 대한 지식이 필요하다보니 난이도와 내용상 빠졌습니다. Database 구조에 대한 지식이 있다면 Excel로 Export하는건 굉장히 쉽습니다. Excel Library를 통해서 원하는 형태로 Data들을 저장해주기만 하면 되니까요. SQL 같은 DB와의 연동을 위해선 약간의 서버 지식이 필요합니다.

Export, Import 기능을 안만들었다고해도, 강의에서 학습하신 Stats의 Setup 부분을 수정해서 Stat 수치들을 Excel이나 Text File에서 불러오게 수정하시면 됩니다. Entity마다 CodeName을 부여하고 해당 Excel이나 Text에서 해당 CodeName의 행을 가져와서 Setting하는 방식으로 말이죠.

추가적으로 Level마다 다른 수치를 적용시키는건 강의 Effect Part를 보시면 비슷한 내용이 나오니 참고 바랍니다.

쓰고 보니 질문 의도가 그게 아니셨는데 제가 쓸때없는 장황한 소리를 한게 아닌지 모르겠습니다.
제가 이해를 잘못하고 답변을 드린 것 같으시다면 죄송하지만 다시 한번 질문해주시면 감사하겠습니다.

MOOOON님의 프로필

MOOOON

질문자

2024.04.01

아아 정확히 이해하셨어요!

눈이 트이는 느낌이네요.
감사합니다.