08 게임 시스템 - jes79/Unity-AI-Glossary-Playground GitHub Wiki
08 게임 시스템
'데이터를 어디에 둘지'를 같이 말하면 확장하기 쉬운 코드가 나옵니다. 아이템·스킬 정보는 ScriptableObject로 요청하세요.
씬 19개 · 폴더 Assets/00_Scenes/08_Systems
| 번호 | 용어 | 쉽게 말하면 | 씬에서 보여 주는 것 | 구현 방식 |
|---|---|---|---|---|
| 0801 | ScriptableObject | 코드와 분리된 데이터 파일 | ItemData ScriptableObject 에셋으로 아이템 카드 표시 | 런타임 데모 |
| 0802 | 체력·데미지 시스템 (IDamageable) | 맞을 수 있는 모든 것에 공통 규칙 | IDamageable로 플레이어·적·상자가 같은 방식으로 데미지 | 런타임 데모 |
| 0803 | 무적 시간 (i-frame) | 맞은 직후 잠깐 무적 + 깜빡임 | 피격 후 1초 무적 + 깜빡임 | 런타임 데모 |
| 0804 | 인벤토리 | 아이템 보관·사용 | 20칸 인벤토리, 같은 아이템 99개 스택 | 런타임 데모 |
| 0805 | 장비 / 스탯 | 착용 시 능력치 변화 | 무기·방어구 장착 시 능력치 변화 | 런타임 데모 |
| 0806 | 버프 / 디버프 (상태이상) | 일정 시간 능력치 변화, 독·빙결 | 독 5초/1초마다 3 데미지 중첩 불가, 가속·빙결 | 런타임 데모 |
| 0807 | 스킬 / 쿨다운 | 기술과 재사용 대기 | Q/W/E 스킬 각기 다른 쿨다운 + 원형 덮개 | 런타임 데모 |
| 0808 | 경험치 / 레벨업 | 성장 곡선 | 필요 경험치 레벨마다 1.2배, 그래프 | 런타임 데모 |
| 0809 | 드롭 테이블 (가중치 랜덤) | 확률별 아이템 드롭 | 일반 70% / 희귀 25% / 전설 5% 가중치 랜덤 히스토그램 | 런타임 데모 |
| 0810 | 상점 / 재화 | 골드로 구매·판매 | 골드로 사고팔기 | 런타임 데모 |
| 0811 | 퀘스트 시스템 | 목표·진행도·보상 | '슬라임 10마리 처치' 퀘스트를 데이터로 추가 | 런타임 데모 |
| 0812 | 세이브 / 로드 | 진행 저장 | 위치·체력·인벤토리 JSON 저장/불러오기 | 런타임 데모 |
| 0813 | PlayerPrefs | 간단한 설정값 저장 | 사운드 볼륨·최고 점수 PlayerPrefs 저장 | 런타임 데모 |
| 0814 | 체크포인트 / 리스폰 | 죽으면 마지막 지점에서 부활 | 깃발 체크포인트 저장, 죽으면 리스폰 | 런타임 데모 |
| 0815 | 게임 매니저 / 게임 상태 | 시작·플레이·일시정지·게임오버 관리 | Ready/Playing/Paused/GameOver 상태 관리 | 런타임 데모 |
| 0816 | 씬 관리 (Scene Load) | 화면 전환 | 타이틀→게임→결과 실제 씬 이동 + 점수 전달 | 런타임 데모 |
| 0817 | 상호작용 (Interaction) | E키로 문 열기·줍기 | 'E 상호작용' 표시, 문·상자·NPC 공통 적용 | 런타임 데모 |
| 0818 | 타일맵 (Tilemap) / 절차적 생성 | 2D 맵 칠하기 / 맵 자동 생성 | Tilemap에 랜덤 던전 방 10개 절차적 생성 | 런타임 데모 |
| 0819 | 로컬라이제이션 | 다국어 지원 | 문자열 테이블로 한국어/영어 전환, Localization 패키지 절차 설명 | 설명 + 대체 구현 |
항목별 상세
0801
ScriptableObject — 코드와 분리된 데이터 파일
요청 예문: "아이템 데이터(이름, 아이콘, 가격, 효과)를 ScriptableObject로 만들어줘."
- 씬:
Assets/00_Scenes/08_Systems/0801_ScriptableObject.unity - 핵심 스크립트:
ItemData, ScriptableObjectDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0801_ScriptableObject.cs - 구현 방식: 런타임 데모
- 개념: MonoBehaviour 없이 데이터만 담는 에셋 클래스. 아이템·스킬·적 설정을 파일로 분리해 두면 프리팹마다 값을 복사하지 않아도 되고, 기획 수정이 코드 수정과 분리된다.
- 씬에서 보여 주는 것: ItemData ScriptableObject 에셋으로 아이템 카드 표시
- 확인 포인트: ItemData 에셋으로 만든 아이템 카드가 표시되는지 보세요. 에셋 값을 바꾸면 그 데이터를 참조하는 모든 곳이 함께 바뀝니다.
0802
체력·데미지 시스템 (IDamageable) — 맞을 수 있는 모든 것에 공통 규칙
요청 예문: "IDamageable 인터페이스로 플레이어, 적, 상자 모두 데미지를 받게 해줘."
- 씬:
Assets/00_Scenes/08_Systems/0802_DamageSystem.unity - 핵심 스크립트:
IDamageable, DamageDealer - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0802_DamageSystem.cs - 구현 방식: 런타임 데모
- 개념: 피해를 받을 수 있는 모든 것이 구현하는 공통 인터페이스. 플레이어·적·상자를 구분하지 않고 같은 함수로 때릴 수 있어 공격 코드가 단순해진다.
- 씬에서 보여 주는 것: IDamageable로 플레이어·적·상자가 같은 방식으로 데미지
- 확인 포인트: 플레이어·적·상자를 같은 공격으로 때려 보세요. 각자 다른 반응(체력 감소·파괴)을 하지만 호출하는 쪽 코드는 하나입니다.
0803
무적 시간 (i-frame) — 맞은 직후 잠깐 무적 + 깜빡임
요청 예문: "피격 후 1초 무적이고 그동안 스프라이트가 깜빡이게 해줘."
- 씬:
Assets/00_Scenes/08_Systems/0803_IFrame.unity - 핵심 스크립트:
IFramePlayer - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0803_IFrame.cs - 구현 방식: 런타임 데모
- 개념: 피격 직후 짧게 무적을 주고 깜빡임으로 알려 주는 처리. 연속 피해로 즉사하는 것을 막고, 반격·회피할 시간을 준다.
- 씬에서 보여 주는 것: 피격 후 1초 무적 + 깜빡임
- 확인 포인트: 연속으로 맞아 보세요. 첫 피격 후 1초 동안은 체력이 더 깎이지 않고 캐릭터가 깜빡입니다. 무적이 끝나는 순간 다시 피해를 입습니다.
0804
인벤토리 — 아이템 보관·사용
요청 예문: "20칸 인벤토리를 만들고 같은 아이템은 최대 99개까지 겹치게(스택) 해줘."
- 씬:
Assets/00_Scenes/08_Systems/0804_Inventory.unity - 핵심 스크립트:
Inventory, InventoryDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0804_Inventory.cs - 구현 방식: 런타임 데모
- 개념: 아이템을 칸에 보관하고 사용·정렬하는 시스템. 같은 아이템을 한 칸에 쌓는 스택 처리와 칸 수 제한이 설계의 핵심이다.
- 씬에서 보여 주는 것: 20칸 인벤토리, 같은 아이템 99개 스택
- 확인 포인트: 같은 아이템을 여러 번 획득해 한 칸에 99개까지 쌓이는지, 100개째가 새 칸으로 가는지 보세요. 칸이 모두 차면 획득이 거절됩니다.
0805
장비 / 스탯 — 착용 시 능력치 변화
요청 예문: "무기 장착 시 공격력이 오르는 장비·스탯 시스템을 만들어줘."
- 씬:
Assets/00_Scenes/08_Systems/0805_EquipmentStats.unity - 핵심 스크립트:
EquipmentDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0805_EquipmentStats.cs - 구현 방식: 런타임 데모
- 개념: 장비를 착용·해제할 때 능력치를 더하고 빼는 시스템. 기본 스탯과 장비 보정을 따로 관리해야 중복 적용·누락 버그가 생기지 않는다.
- 씬에서 보여 주는 것: 무기·방어구 장착 시 능력치 변화
- 확인 포인트: 무기와 방어구를 착용·해제하며 공격력·방어력이 정확히 더해지고 빠지는지 보세요. 같은 장비를 바꿔 끼워도 값이 누적되지 않아야 정상입니다.
0806
버프 / 디버프 (상태이상) — 일정 시간 능력치 변화, 독·빙결
요청 예문: "독 디버프: 5초 동안 1초마다 데미지 3, 중첩 불가로 만들어줘."
- 씬:
Assets/00_Scenes/08_Systems/0806_BuffDebuff.unity - 핵심 스크립트:
StatusEffectDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0806_BuffDebuff.cs - 구현 방식: 런타임 데모
- 개념: 일정 시간 능력치를 바꾸거나 지속 피해를 주는 상태. 중첩 허용 여부, 지속 시간 갱신 방식, 해제 조건을 정해 두지 않으면 금방 꼬인다.
- 씬에서 보여 주는 것: 독 5초/1초마다 3 데미지 중첩 불가, 가속·빙결
- 확인 포인트: 독을 두 번 걸어 보세요. 중첩 불가 설정이라 피해가 두 배가 되지 않고 지속 시간만 갱신됩니다. 가속·빙결도 켜고 끄며 이동 속도 변화를 보세요.
0807
스킬 / 쿨다운 — 기술과 재사용 대기
요청 예문: "Q, W, E 스킬 3개와 각각 다른 쿨다운을 가진 스킬 시스템을 만들어줘."
- 씬:
Assets/00_Scenes/08_Systems/0807_SkillCooldown.unity - 핵심 스크립트:
SkillCooldownDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0807_SkillCooldown.cs - 구현 방식: 런타임 데모
- 개념: 스킬 사용과 재사용 대기 시간을 관리하는 시스템. 쿨다운은 사용 시각을 기록해 두고 비교하는 방식이 Update 로 세는 방식보다 정확하다.
- 씬에서 보여 주는 것: Q/W/E 스킬 각기 다른 쿨다운 + 원형 덮개
- 확인 포인트: Q/W/E 를 눌러 각기 다른 쿨다운이 따로 도는지, 쿨다운 중에는 눌러도 발동하지 않는지 보세요.
0808
경험치 / 레벨업 — 성장 곡선
요청 예문: "필요 경험치가 레벨마다 1.2배씩 늘어나는 레벨업 시스템을 만들어줘."
- 씬:
Assets/00_Scenes/08_Systems/0808_LevelUp.unity - 핵심 스크립트:
LevelUpDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0808_LevelUp.cs - 구현 방식: 런타임 데모
- 개념: 경험치를 쌓아 레벨을 올리는 성장 구조. 레벨마다 필요 경험치를 몇 배로 늘릴지가 체감 성장 속도를 결정한다.
- 씬에서 보여 주는 것: 필요 경험치 레벨마다 1.2배, 그래프
- 확인 포인트: 경험치를 얻어 레벨업하는지, 레벨이 오를수록 필요 경험치가 1.2배씩 늘어나는지 그래프로 보세요.
0809
드롭 테이블 (가중치 랜덤) — 확률별 아이템 드롭
요청 예문: "일반 70%, 희귀 25%, 전설 5% 가중치 랜덤 드롭 테이블을 만들어줘."
- 씬:
Assets/00_Scenes/08_Systems/0809_DropTable.unity - 핵심 스크립트:
DropTableDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0809_DropTable.cs - 구현 방식: 런타임 데모
- 개념: 아이템마다 가중치를 주고 확률에 따라 하나를 뽑는 방식. 확률 합을 1 로 맞추지 않아도 되는 가중치 방식이 밸런스 조절에 편하다.
- 씬에서 보여 주는 것: 일반 70% / 희귀 25% / 전설 5% 가중치 랜덤 히스토그램
- 확인 포인트: 여러 번 드롭을 돌려 히스토그램이 일반 70% / 희귀 25% / 전설 5% 비율에 수렴하는지 보세요. 시도 횟수가 적으면 편차가 큰 것도 함께 보세요.
0810
상점 / 재화 — 골드로 구매·판매
요청 예문: "골드로 아이템을 사고 팔 수 있는 상점을 만들어줘."
- 씬:
Assets/00_Scenes/08_Systems/0810_Shop.unity - 핵심 스크립트:
ShopDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0810_Shop.cs - 구현 방식: 런타임 데모
- 개념: 재화로 아이템을 사고파는 시스템. 소지 금액 검사, 인벤토리 공간 검사, 판매가 비율을 모두 확인해야 악용이 막힌다.
- 씬에서 보여 주는 것: 골드로 사고팔기
- 확인 포인트: 골드가 부족할 때 구매가 거절되는지, 판매하면 구매가보다 적게 받는지, 인벤토리가 꽉 차면 구매가 막히는지 보세요.
0811
퀘스트 시스템 — 목표·진행도·보상
요청 예문: "'슬라임 10마리 처치' 같은 퀘스트를 데이터로 추가할 수 있게 만들어줘."
- 씬:
Assets/00_Scenes/08_Systems/0811_QuestSystem.unity - 핵심 스크립트:
QuestData, QuestManager - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0811_QuestSystem.cs - 구현 방식: 런타임 데모
- 개념: 목표·진행도·보상을 데이터로 관리하는 시스템. 진행도는 이벤트를 듣고 올리는 구조로 만들면 퀘스트 종류가 늘어도 코드를 고치지 않는다.
- 씬에서 보여 주는 것: '슬라임 10마리 처치' 퀘스트를 데이터로 추가
- 확인 포인트: 슬라임 처치 퀘스트를 받고 적을 잡아 진행도가 올라가는지, 10마리를 채우면 완료·보상으로 넘어가는지 보세요.
0812
세이브 / 로드 — 진행 저장
요청 예문: "플레이어 위치, 체력, 인벤토리를 JSON 파일로 저장하고 불러오게 해줘."
- 씬:
Assets/00_Scenes/08_Systems/0812_SaveLoad.unity - 핵심 스크립트:
SaveLoadDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0812_SaveLoad.cs - 구현 방식: 런타임 데모
- 개념: 진행 상황을 파일로 저장하고 다시 읽는 시스템. 저장할 데이터를 직렬화 가능한 클래스로 따로 두는 것이 핵심이고, 버전이 바뀔 때의 호환 처리도 미리 정해야 한다.
- 씬에서 보여 주는 것: 위치·체력·인벤토리 JSON 저장/불러오기
- 확인 포인트: 위치·체력·인벤토리를 저장한 뒤 값을 바꾸고 불러와 되돌아오는지 보세요. 저장된 JSON 내용도 패널에서 확인할 수 있습니다.
0813
PlayerPrefs — 간단한 설정값 저장
요청 예문: "사운드 볼륨과 최고 점수를 PlayerPrefs로 저장해줘."
- 씬:
Assets/00_Scenes/08_Systems/0813_PlayerPrefs.unity - 핵심 스크립트:
PlayerPrefsDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0813_PlayerPrefs.cs - 구현 방식: 런타임 데모
- 개념: 키-값 하나씩 저장하는 Unity 기본 저장소. 볼륨·최고 점수 같은 작은 설정에만 쓰고, 평문으로 저장되니 중요한 데이터에는 쓰지 않는다.
- 씬에서 보여 주는 것: 사운드 볼륨·최고 점수 PlayerPrefs 저장
- 확인 포인트: 볼륨과 최고 점수를 바꾼 뒤 씬을 다시 시작해 값이 유지되는지 보세요. 삭제 버튼으로 초기화되는지도 확인해 보세요.
0814
체크포인트 / 리스폰 — 죽으면 마지막 지점에서 부활
요청 예문: "깃발을 지나면 체크포인트로 저장되고 죽으면 거기서 리스폰하게 해줘."
- 씬:
Assets/00_Scenes/08_Systems/0814_CheckpointRespawn.unity - 핵심 스크립트:
CheckpointPlayer - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0814_CheckpointRespawn.cs - 구현 방식: 런타임 데모
- 개념: 마지막으로 지난 지점을 저장해 두고 죽으면 그곳에서 되살리는 구조. 저장 시점에 무엇까지 되돌릴지(체력·적 상태·획득 아이템)를 정하는 것이 설계의 핵심이다.
- 씬에서 보여 주는 것: 깃발 체크포인트 저장, 죽으면 리스폰
- 확인 포인트: 깃발을 지나 체크포인트를 저장하고 죽어 보세요. 처음이 아니라 마지막 깃발에서 되살아나는지 확인해 보세요.
0815
게임 매니저 / 게임 상태 — 시작·플레이·일시정지·게임오버 관리
요청 예문: "GameManager로 Ready, Playing, Paused, GameOver 상태를 관리해줘."
- 씬:
Assets/00_Scenes/08_Systems/0815_GameManagerState.unity - 핵심 스크립트:
GameManager, DodgeGame - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0815_GameManagerState.cs - 구현 방식: 런타임 데모
- 개념: Ready·Playing·Paused·GameOver 같은 전체 흐름을 한곳에서 관리하는 구조. 상태에 따라 입력·UI·시간을 일괄로 바꿀 수 있어 흐름 버그가 줄어든다.
- 씬에서 보여 주는 것: Ready/Playing/Paused/GameOver 상태 관리
- 확인 포인트: 상태를 전환하며 입력과 UI 가 함께 바뀌는지 보세요. GameOver 에서는 조작이 막히고, Ready 로 돌리면 초기화됩니다.
0816
씬 관리 (Scene Load) — 화면 전환
요청 예문: "타이틀 → 게임 → 결과 씬으로 이동하고 점수를 넘겨줘."
- 씬:
Assets/00_Scenes/08_Systems/0816_SceneManagement.unity - 핵심 스크립트:
SceneFlow, SceneFlowScreen - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0816_SceneManagement.cs - 구현 방식: 런타임 데모
- 개념: 씬을 바꿔 화면을 전환하는 처리. 씬 사이에 값을 넘기려면 static 데이터나 DontDestroyOnLoad 오브젝트가 필요하고, Build Settings 에 씬이 등록되어 있어야 로드된다.
- 씬에서 보여 주는 것: 타이틀→게임→결과 실제 씬 이동 + 점수 전달
- 확인 포인트: 타이틀 → 게임 → 결과로 실제 씬이 이동하고, 게임에서 얻은 점수가 결과 화면까지 전달되는지 보세요.
0817
상호작용 (Interaction) — E키로 문 열기·줍기
요청 예문: "가까이 가면 'E 상호작용' 표시가 뜨고 문, 상자, NPC에 공통 적용되게 해줘."
- 씬:
Assets/00_Scenes/08_Systems/0817_Interaction.unity - 핵심 스크립트:
IInteractable, Interactor - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0817_Interaction.cs - 구현 방식: 런타임 데모
- 개념: 가까운 대상에 E 키 안내를 띄우고 상호작용을 실행하는 구조. 대상마다 인터페이스를 구현하게 하면 문·상자·NPC 를 같은 코드로 다룰 수 있다.
- 씬에서 보여 주는 것: 'E 상호작용' 표시, 문·상자·NPC 공통 적용
- 확인 포인트: 문·상자·NPC 에 다가가 E 안내가 뜨고 각자 다르게 반응하는지, 멀어지면 안내가 사라지는지 보세요.
0818
타일맵 (Tilemap) / 절차적 생성 — 2D 맵 칠하기 / 맵 자동 생성
요청 예문: "Tilemap에 랜덤 던전 방 10개를 절차적으로 생성해줘."
- 씬:
Assets/00_Scenes/08_Systems/0818_TilemapProcedural.unity - 핵심 스크립트:
DungeonGenerator - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0818_TilemapProcedural.cs - 구현 방식: 런타임 데모
- 개념: 2D 맵을 타일로 칠하는 Tilemap 과, 규칙으로 맵을 자동 생성하는 절차적 생성. 방 배치 → 통로 연결 → 타일 칠하기 순서가 가장 흔한 구성이다.
- 씬에서 보여 주는 것: Tilemap에 랜덤 던전 방 10개 절차적 생성
- 확인 포인트: 다시 생성을 눌러 매번 다른 던전이 나오는지, 그래도 모든 방이 통로로 이어져 갈 수 없는 방이 없는지 보세요.
0819
로컬라이제이션 — 다국어 지원
요청 예문: "Unity Localization 패키지로 한국어/영어 전환을 만들어줘."
- 씬:
Assets/00_Scenes/08_Systems/0819_Localization.unity - 핵심 스크립트:
Localization, LocalizedText - 빌더:
Assets/01_Scripts/Editor/Scenes/08_Systems/Build0819_Localization.cs - 구현 방식: 설명 + 대체 구현
- 개념: 문자열을 코드에서 분리해 언어별 표로 관리하는 작업. 글자 길이가 언어마다 달라지는 UI 와 폰트(특히 CJK) 준비가 실제 작업의 대부분이다.
- 씬에서 보여 주는 것: 문자열 테이블로 한국어/영어 전환, Localization 패키지 절차 설명
- 확인 포인트: KO ↔ EN 을 전환해 모든 UI 문자열이 함께 바뀌는지, 길이가 달라져도 UI 가 깨지지 않는지 보세요. 패널의 Localization 패키지 절차도 함께 읽어 보세요.