Shuttle Bus Defense 코드 문서

VR 기반 3D 타워 디펜스 게임의 체계적인 코드 구조 분석

팀 프로젝트 중 본인이 담당하고 직접 작성한 코드만을 선별하여 문서화했습니다
0 스크립트 파일
0 주요 기능
0 API 레퍼런스

특정 기능 구현 방법

VR 타워 디펜스 게임의 핵심 시스템 구현 방식

코드베이스 구조

Shuttle Bus Defense의 모든 VR 코드 파일과 각각의 기능을 체계적으로 정리

VR 전용 코드: VR 환경에 최적화된 Unity 3D 게임 개발 코드입니다

VR 시스템 아키텍처

VRDefense 프로젝트의 실제 4계층 아키텍처 구조

중앙 집중식 설계: GameManager 중심의 상태 관리와 VR 물리 상호작용 최적화

UI & Feedback Layer

UiManager (싱글톤)
ItemSelect
ItemSlot
ShopButton
PurchaseEffect
GoalSpot

VR Interaction & Physics Layer

LogCollision
SkillPaperTowel
SkillCooldown

Core Game Logic Layer

GameManager (중앙 관리)
MonsterSpawner
Monster

Data Layer

MonsterScriptable
SkillState

API 레퍼런스

주요 VR 클래스와 메서드의 상세한 API 문서

Monster

MonoBehaviour

몬스터의 행동, 상태, 생명주기를 관리하는 핵심 클래스. 랜덤 외형 생성, 체력 관리, 상태 효과 적용 등을 담당합니다.

메서드

void SetTrapped(float duration)

몬스터를 지정된 시간 동안 움직이지 못하게 함. 이동 컴포넌트를 비활성화합니다.

매개변수:
  • duration (float) * - 함정 지속 시간
void SetLullaby(float duration)

몬스터의 이동 속도를 30%로 감소시킴

매개변수:
  • duration (float) * - 자장가 지속 시간
void TakeDamage(int damage, Vector3 weaponpos, float knockback, bool isHitByLog)

몬스터에게 데미지를 주고 넉백 효과를 적용. HP 슬라이더를 업데이트하고 체력이 0 이하가 되면 Die() 호출

매개변수:
  • damage (int) * - 적용할 데미지
  • weaponpos (Vector3) * - 무기 위치
  • knockback (float) * - 넉백 강도
  • isHitByLog (bool) * - 통나무에 맞았는지 여부
void HitByPaperTowel()

페이퍼 타올 공격에 맞았을 때의 특수 처리

void Die()

몬스터 사망 처리. OnMonsterDeath 이벤트 발생, 화폐 및 점수 지급 후 오브젝트 파괴

void SetRandomAppearance()

헤어, 상의, 하의, 신발을 랜덤으로 선택하여 외형 설정

속성

currentHealth (int) [읽기 전용]

몬스터의 현재 체력

score (int)

몬스터 처치 시 획득하는 점수 (기본값: 100)

monsterType (string)

몬스터의 타입을 나타내는 문자열

monsterData (MonsterScriptable)

몬스터 데이터를 담고 있는 ScriptableObject

isTrapped (bool)

몬스터가 함정에 걸렸는지 여부

isLullaby (bool)

몬스터가 자장가 효과에 영향받고 있는지 여부

MonsterSpawner

MonoBehaviour

웨이브 기반으로 몬스터 생성을 관리하는 클래스. 랜덤 몬스터 타입과 위치 선택을 통한 다양성 제공

메서드

void StartWave(Wave wave)

웨이브를 시작하고 몬스터 생성 프로세스를 개시합니다

매개변수:
  • wave (Wave) * - 시작할 웨이브 데이터

속성

spawner (GameObject)

몬스터 생성 위치를 나타내는 게임오브젝트

GameManager

MonoBehaviour

게임의 전반적인 상태와 진행을 관리하는 중앙 관리자 클래스. 싱글톤 패턴으로 구현되어 전역 접근 가능

메서드

void DecreaseHealth(int amount)

플레이어 체력을 감소시키고 UI를 업데이트. 체력이 0 이하가 되면 게임 오버 처리

매개변수:
  • amount (int) * - 감소시킬 체력량
void AddCurrency(int amount)

플레이어에게 화폐를 추가하고 UI 업데이트

매개변수:
  • amount (int) * - 추가할 화폐량
bool SpendCurrency(int amount)

화폐 사용 가능 여부를 확인하고 차감. 성공 시 true 반환

매개변수:
  • amount (int) * - 소비할 화폐량
void AddMonster()

현재 몬스터 수를 증가시킵니다

void DieMonster()

몬스터 수를 감소시키고 스테이지/게임 완료 조건 확인

void StageClear()

스테이지 클리어 처리 및 UI 표시

void GameClear(int health)

플레이어 체력에 따라 엔딩 결정 (50 이상: 굿엔딩, 미만: 노말엔딩)

매개변수:
  • health (int) * - 플레이어 체력

속성

gameManager (GameManager) [읽기 전용]

싱글톤 인스턴스 (static)

maxHealth (int)

플레이어의 최대 체력

currentHealth (int)

플레이어의 현재 체력

currency (int)

플레이어의 게임 내 화폐

weaponLevel (int)

현재 무기 레벨

ItemSelect

MonoBehaviour

게임 내 아이템 선택 및 UI 관리를 담당하는 클래스. 동적 아이템 목록 생성과 구매 가능성 확인 제공

메서드

void Awake()

아이템 목록 초기화. itemDisplay 하위의 모든 오브젝트를 items 리스트에 추가

void Start()

초기 UI 설정 및 첫 번째 아이템 선택

void ClickOn(string itemName)

아이템 클릭 시 호출. 이전 아이템 비활성화 후 새 아이템 활성화 및 UI 업데이트

매개변수:
  • itemName (string) * - 클릭한 아이템 이름

속성

itemDisplay (GameObject)

아이템을 전시할 목록 부모 오브젝트

nowOn (string)

현재 선택된 아이템 이름 (static)

content (string)

이 아이템의 설명

cost (int)

아이템 구매 비용

UiManager

MonoBehaviour

UI 요소들을 중앙에서 관리하는 싱글톤 클래스. 체력과 화폐 표시를 실시간 업데이트

메서드

void UpdateHealthText(int currentHealth, int maxHealth)

체력 텍스트를 '현재체력/최대체력' 형태로 업데이트

매개변수:
  • currentHealth (int) * - 현재 체력
  • maxHealth (int) * - 최대 체력
void UpdateCurrencyText(int currency)

화폐 텍스트를 현재 화폐 값으로 업데이트

매개변수:
  • currency (int) * - 현재 화폐

속성

uiManager (UiManager) [읽기 전용]

UiManager 싱글톤 인스턴스 (static)

healthText (TextMeshProUGUI)

체력을 표시하는 UI 텍스트

currencyText (TextMeshProUGUI)

화폐를 표시하는 UI 텍스트

SkillPaperTowel

MonoBehaviour

페이퍼 타올 스킬을 관리하는 클래스. 플레이어 위치에서 페이퍼 타올을 생성하고 발사

메서드

void Awake()

플레이어 Transform 초기화 및 컴포넌트 설정

IEnumerator PaperTowel()

페이퍼 타올 생성, 물리적 힘 적용, 크기 설정을 수행하는 코루틴

IEnumerator DestroyPrefab()

3초 후 페이퍼 타올 오브젝트를 파괴하는 코루틴

속성

isCooldown (bool)

현재 스킬이 쿨다운 중인지 여부

SkillCooldown

MonoBehaviour

스킬 쿨다운 시스템을 관리하는 클래스. 다중 스킬의 쿨다운 타이머와 UI 업데이트 담당

메서드

void HideSkillSetting(int num)

특정 스킬의 쿨다운을 시작하고 UI 업데이트

매개변수:
  • num (int) * - 스킬 인덱스
void ReduceCooldown(float reductionAmount)

모든 스킬의 쿨다운 시간을 지정된 양만큼 감소

매개변수:
  • reductionAmount (float) * - 감소시킬 쿨다운 시간

속성

hideSkillButton (GameObject[])

스킬 버튼 게임오브젝트들의 배열

skillCooldownText (TextMeshProUGUI[])

스킬 쿨다운 시간을 표시하는 텍스트들

skillImage (Image[])

스킬 아이콘 이미지들의 배열

VR 코드 뷰어