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 패키지 절차도 함께 읽어 보세요.