- 게임 개발 과정에서 협업이 중요하다는 것을 알고, 동료 직원들과의 협업을 위한 고민을 많이 합니다.
- 개인 업무에 그치지 않고 동료의 업무를 도우며 팀에 일이 주어지면 먼저 나서서 일을 받아 수행합니다.
- 공부한 내용들, 프로젝트 관련 내용들을 정리하여 블로그, GitHub Wiki 등에 문서화합니다.
- Github Projects, Issues를 이용해 프로젝트 일정 관리를 합니다.
- Email. [email protected]
- Unreal Engine과 C++를 이용하여 개인프로젝트 'LS'를 제작했습니다.
- Unity와 C#을 이용하여 개인프로젝트 'MRid'를 제작했습니다.
- 회사에서 2년 가까이 서무 업무를 하며 동료 직원들과 커뮤니케이션하며 도왔습니다.
- GitHub의 Project, Issue, Wiki 등을 이용해 프로젝트 및 일정을 관리했습니다.
개인 프로젝트를 진행하며 게임 개발에 대한 이해도와 역량을 키웠습니다.
자세한 프로젝트 관련 내용은 하단 혹은 Github Wiki에서 확인 가능합니다.
- 게임 장르 : looter shooter(TPS + RPG)
- 제작 기간 : 2023. 6. ~ 10.
- 제작 인원 : 1인 (개인 프로젝트)
- 사용 엔진 : Unreal Engine v5.2
- 언어 : C++
- 플레이 영상 :
- 문제점
- 프로젝트를 구체적 기획없이 개발을 시작하려고 하니 개발 우선순위 및 순서 결정 등의 어려운 부분이 있었습니다.
- 해결 방안
- 구현하려는 기능, 프로젝트의 전체적인 구조 등을 Github Projects를 이용해 시각적으로 계획하고 진행해나가니 이전 프로젝트 보다 더 효율적인 개발이 가능했습니다.
- GitHub Projects 링크
- 문제점
- 처음에는 코드에 스탯 등 관련 데이터들을 넣어 하드코딩했습니다. 그러다 보니 프로젝트를 진행하며 각종 수치들을 변경할 때마다 매번 코드를 수정하고 다시 컴파일을 하느라 시간이 많이 소모되었습니다.
- 해결 방안
- csv를 이용한 데이터 시스템과 블루프린트를 이용해 데이터를 코드와 분리하여 수치를 변경할 수 있도록 시스템을 구축했습니다.
- 코드 링크
- 문제점
- 플레이어 캐릭터 클래스를 제작하면서 관련 기능 대부분을 한 클래스에 제작하다 보니 클래스가 너무 커져 유지 보수가 점점 어려워졌습니다. 그리고 같은 기능을 몬스터 클래스에도 재활용해야 하는 상황이 발생했습니다.
- 해결 방안
- 컴포넌트 디자인 패턴을 활용해 각 기능들을 분리하고 재활용했습니다.
- 코드 링크
- 문제점
- 처음 스킬 구현 시 플레이어 캐릭터 클래스 내에 구현하고 시전을 했는데, 스킬을 추가할 때 기존의 코드를 활용하지 못해 클래스 크기가 비효율적으로 커지는 문제점이 있었습니다.
- 해결 방안
- 스킬 부모 클래스를 만들고 각 스킬의 세부사항은 자식 클래스로 구현한 뒤, 캐릭터는 부모 클래스의 스킬 시전 메서드만 호출하는 식으로 간소화했습니다.
- 코드 링크
- 게임 장르 : simulation, management
- 제작 기간 : 2023. 4. ~ 2023. 5.
- 사용 엔진 : Unity
- 언어 : C#
이하 각 프로젝트의 세부 설명입니다.
GitHub : LS Project
Wiki : LS Wiki
- 게임 장르 : looter shooter(RPG + TPS)
- 제작 기간 : 2023. 6. ~ 현재
- 제작 인원 : 1인 (개인 프로젝트)
- 사용 엔진 : Unreal Engine v5.2
- 언어 : C++
- 이미지 클릭 시 유튜브에서 영상이 실행됩니다.
프로젝트 일정 및 목표 관리, 코드 기록 등의 필요성을 느끼고 GitHub의 Project, Issue, Wiki 등의 기능을 이용해 프로젝트를 제작했습니다.
-
Project
-
Issue
- GitHub의 Project에 들어가는 Issue들이며, Git Commit 과 연동해 각 Issue에 해당하는 Commit들을 바로 확인할 수 있었습니다.
- 체크박스를 통해 세부 목표관리를 했습니다.
-
Wiki
- 프로젝트에서 구현한 기능들을 GitHub의 Wiki를 통해 정리했습니다.
- 프로젝트 초기에는 무기나 캐릭터 스탯 등 수치들을 코드로 설정했고, 프로젝트가 진행되면서 이런 데이터를 수정할 때마다 코드 수정 과정에서 에러가 생기는 등의 문제가 있었습니다.
- 해결 방법으로 데이터 시스템을 구축해했고, C++ 코드에 의존적이지 않게 데이터들을 관리할 수 있게 했습니다.
- 또한 이렇게 구축한 데이터 시스템을 통해 비프로그래머도 프로그래머의 도움 없이 게임 내 데이터 수정이 가능합니다.
- RPG 게임 특성상 캐릭터를 구현하는 클래스의 크기가 커져 수정 및 확장이 용이하지 않았습니다.
- 이런 문제를 해결하기 위해 컴포넌트 기반 설계를 도입했습니다.
- Defense, Resource, Equipment, Inventory 등의 기능을 컴포넌트로 분리했으며, 이를 몬스터 구현 등에 재사용했습니다.
- 그리고 컴포넌트 간의 의존성을 줄이기 위해 delegate를 이용했습니다.
- 스킬을 추가하는 과정에서 캐릭터 클래스가 과도하게 커지는 경향이 있었고, 그 과정 속에서 에러가 발생하는 경우가 있었습니다.
- 해결 방안으로 다형성을 이용하여 유연하고 확장성 있게 부가 속성을 구현했습니다.
- GitHub의 Wiki에 프로젝트에서 구현한 기능들을 정리했습니다.
- 아래 링크를 통해 확인 가능합니다.
- 프로젝트의 GitHub 링크입니다.
노션에서 플레이 영상 등 더 자세한 내용 확인 가능합니다.
Notion: Notion
GitHub: GitHub
World of Warcraft와 Football Manager에서 아이디어를 가져왔습니다. 이 게임에서, 플레이어는 캐릭터들을 고용하고, 던전을 계속 반복해서 클리어하면서 캐릭터들을 성장시켜 최종적으로 마지막 던전을 클리어하는 것이 목표입니다. 전투는 AI로 진행됩니다. 던전에서 수집한 재화와 경험치를 이용해서 캐릭터들의 능력치를 업그레이드하며 더 강한 캐릭터를 고용하고 장비를 구매합니다.
- 게임 장르 : simulation, management
- 제작 기간 : 2023. 4. ~ 2023. 5.
- 사용 엔진 : Unity
- 언어 : C#
- 던전의 맵을 tile과 grid를 이용해 구현했는데, tile이 많아질수록 BFS를 통한 AI 경로찾기의 시간 복잡도가 매우 커져 더 효율적인 알고리즘은 A* 알고리즘을 이용해 AI 경로찾기를 구현했습니다.
- GameScene의 던전을 tile map과 grid를 이용하여 나누고 이동 가능한 노드들을 미리 세팅해 둔 후, 회피 길찾기 메소드와 공격 길찾기 메소드로 크게 나누었습니다.
- 회피 메소드는 해당 위치 까지 가는 최소 거리를 구하고 그 경로를 list로 반환합니다
- 공격 길찾기 메소드는 공격 타겟까지 가는 거리 중 공격 가능 범위에 들어오는 node 발견 시 해당 노드까지의 경로를 list로 반환합니다
- 캐릭터들의 상태는 STAY, ATTACK, MOVE 로 구분했습니다.
- 캐릭터들은 responseSpeed * 1초 만큼의 시간을 주기로 행동을 결정합니다.
- 먼저 현재 위치가 범위스킬안에 포함되어 있는 지 확인하고, 그렇다면 범위 밖으로 이동할 곳을 찾아 이동합니다.
- 범위스킬안에 포함되어 있지 않다면 공격 대상과의 거리를 계산합니다.
- 대상과의 거리가 공격 가능 거리 이내라면 공격합니다
- 그렇지 않다면 공격 가능 거리 이내까지 이동 합니다.
- 적은 공격 스킬 사용 시 모든 아군 캐릭터들에게 이벤트가 발생했음을 알립니다. 판단 코루틴 함수를 정지시키고 다시 판단 코루틴 함수를 호출해서 즉각 이벤트에 반응하게 합니다.
- 캐릭터는 이동 대상 위치 까지의 루트를 A* 알고리즘으로 부터 list로 받아 list를 탐색하며 움직입니다.
- 공격 상태에서는 스킬을 먼저 사용합니다. 스킬에는 시전시간이 있으며 이 시간동안 캐릭터는 움직일 수 없습니다. 쿨타임이라 스킬 사용이 가능하지 않다면 기본공격을 합니다.
- scriptable object(CharacterSO)와 prefab을 이용하여 캐릭터들을 구성하였습니다. 캐릭터의 scriptable object는 크게 두가지로 나누었습니다. 하나는, 캐릭터 직업별 베이스 스탯을 나타내는 scriptable object입니다. 다른 하나는, 게임 실행 중 scene 간의 이동에 있어 유지되어야 하는 데이터들을 보관하는 scriptable object로, 인게임 중에 scriptable object를 인스턴스화하여 사용합니다.
- prefab도 캐릭터 직업별 베이스를 구성하는데 사용하였습니다.
- 캐릭터를 구성하는 script는 두가지 입니다. 하나는 AllyCtrl 로, 전투 시 캐릭터의 움직임을 구사하며, 다른 하나는 ChracterStats로, 전투 시 일시적으로 변하는 스탯들을 보관합니다.
- scriptable object(EquipmentSO)를 이용하였습니다
- Unity UI Toolkit 을 이용하여 제작하였습니다.
- Main Screen은 Dungeon Screen, Shop Screen, Pub Screen, Inventory Screen, Prepare Screen 으로 구성되어 있으며, 화면 왼쪽의 TabBar를 통해 스크린 간의 전환이 이루어집니다.
-
던전 및 그 던전의 어려움 정도를 결정하는 화면입니다.
-
start 버튼을 누르면 Prepare Screen UI가 팝업됩니다.
-
게임 진행도에 따라 표시되는 던전의 종류와 어려움 정도가 다릅니다. LevelSO scriptable object에 의해 결정됩니다.
-
장비는 무기와 갑옷으로 이루어져 있으며, scriptable object(EquipmentSO)로 다룹니다.
-
무기와 갑옷을 베이스로, 3종류의 레어도 모두 랜덤으로 결정되어 shop에 나타납니다.
-
구매한 장비는 GameManager에서 List로 관리합니다.
-
pub에서 용병들을 고용하고, 퀘스트를 받습니다.
-
고용한 용병들은 GameManager 에서 List로 관리합니다.
-
퀘스트 클리어에 따라 시도할 수 있는 던전 종류가 늘어납니다.
- Prepare screen 에서 start 버튼을 누르면 이 scene 으로 이동합니다.
- 아군과 적의 hp를 큰 막대바로 보여주고, 가한 데미지를 수치로, 스킬 시전시 아래의 작은 막대바가 차오릅니다.
- 아군 캐릭터들은 적의 범위 공격 스킬이 자신의 바닥 아래에 깔리면 범위에서 벗어나는 위치를 찾고 그 위치로 이동합니다.
- 공격가능한 범위에서 벗어나면 공격할 수 있는 거리 까지 이동하여 공격합니다.
[]