# Unity_VampireSurvivors_Copy
**Repository Path**: blackShrimp/Unity_VampireSurvivors_Copy
## Basic Information
- **Project Name**: Unity_VampireSurvivors_Copy
- **Description**: 吸血鬼幸存者备份
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: PC
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-01-13
- **Last Updated**: 2024-01-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Unity_VampireSurvivors_Copy
> 뱀파이어 서바이벌 모작 (2022. 07 ~ 2022. 08)
> Unity2D C#
### [>> View All Source Codes](https://github.com/SikPang/Unity_VampireSurvivors_Copy/tree/android/Assets/Scripts)
### [>> Download Game [Windows]](https://drive.google.com/file/d/1tGWBtdpHSdv7wRL8RQ1wvmi3kwXcsKaI/view)
### [>> Download Game [MacOS]](https://drive.google.com/file/d/1PGxx8P-M8Ph8j4mRweQPi6QLz1eX90Ug/view?usp=sharing)
### [>> Download Game [Android]](https://drive.google.com/file/d/1SiQrK_csoYX4-b9fRdXm9gapInbnVWD_/view?usp=sharing)
### [>> Download Build(need Xcode) [iOS]](https://drive.google.com/file/d/1eikto2OBk8gGUPl9WagoHgBoyGuL7x-G/view?usp=sharing)
## 1. Object Pooling
> Destory의 가비지 컬렉팅과 Instantiate으로 인한 프레임 드랍 방지
- Dictionary를 활용하여 시작 시 Instantiate하여 Queue에 담아두고, 필요할 때 Queue에서 하나씩 가져오기
- 적, 무기 이펙트, 플로팅 데미지 텍스트, 크리스탈 오브젝트 생성을 담당하고 각각의 고유 key값으로 접근
- Generic을 활용하여 모든 타입을 받아 switch-case로 처리
## 2. Scriptable Objects
> 플레이어, 적, 무기, 악세사리, 크리스탈 등의 모든 종류별 데이터 관리
- 생명력, 공격력, 이동속도, Image, Animator 등 기본 정보 포함
- 해당 데이터들을 모두 가져올 수 있는 싱글톤 패턴의 클래스로 관리
- 종류마다 하나씩 상속받는 대신 Scriptable Objects에서 정보를 가져오는 방식
## 3. 적 생성기
> 사방에서 0.5초마다 적 생성
- Scriptable Objects로 4종류 적의 정보 불러와 stage마다 다르게 Key값으로 사용
- 방향을 랜덤으로 정하고 Object Pooling에서 가져오기
## 4. 공격
> 획득한 무기에 따라 공격
- 공격 받은 적은 Coroutine으로 0.1초간 하얗게 색 변경 (SpriteRenderer의 Shader를 Text Shader로 일시적으로 변경하여 구현)
- 공격 받은 적은 AddForce로 적의 이동 방향의 반대 방향으로 넉백
- 기본 데미지의 +-20%의 랜덤 데미지를 입힘, 해당 데미지 텍스트를 Object Pooling에서 가져와 플로팅
## 5. 무기
> 총 6가지의 무기에 따라 각 다른 자동 공격
- 컴포넌트 패턴에서 아이디어를 얻어 미리 모든 생성기 스크립트를 오브젝트에 넣어두고 획득한 무기만 GetComponent 하여 StartCoroutine
- Scriptable Objects로 각각의 무기 정보 불러오기
- 상속으로 각각의 무기 생성기 설계, 생성기의 Coroutine에서 주기마다 무기 이펙트를 ObjectPooling에서 가져와 생성
- 무기 이펙트 생성 시, 크기와 각도, AddForce 조절 및 코루틴으로 공격 속도 조절 (악세사리 효과 적용 등)
- 무기의 레벨에 따라 생성되는 무기 이펙트 개수 조절
- 무기 생성기의 데미지와 지속 시간 등을 무기 클래스로 파라미터로 넘겨주어 레벨에 따라 데미지 조절
## 6. 크리스탈
> 적 처치 시 일정 확률로 드랍되는 레벨 업 크리스탈
- Scriptable Objects로 각각의 크리스탈 정보 불러오고, ObjectPooling에서 가져와 드랍
- 플레이어가 바라보는 방향으로 AddForce 이후 코루틴을 이용해서 0.2초 뒤 플레이어에게 이동
## 7. 레벨 업
> 레벨업 할 때마다 랜덤하게 뽑힌 3가지의 아이템 중 선택하여 획득 가능
- 정해진 슬롯 개수를 동적 생성 후 각각의 정보 오브젝트(아이콘,설명 등)를 배열에 담아둠
- 랜덤 아이템을 Scriptable Objects의 관리 클래스에서 정보를 가져와 표기
- 아이템을 고를 때마다 Inventory의 Dictionary에 추가 후 효과 적용 (ContainsKey로 이미 있는지 확인 후 획득 or 레벨업)
- ParticleSystem과 Color.Lerp를 이용한 이펙트
- 악세사리는 무기와 다르게 효과만 반복 적용
## 8. 인벤토리
> 현재까지 획득한 아이템 리스트
- Dictionary를 사용하여 획득한 무기와 악세사리 추가 value 값으로 레벨을 가짐
- 정해진 슬롯 개수를 동적 생성 후 Dictionary를 순회하며 해당 아이템의 정보를 표기
## 9. 피격, 사망
> 체력이 깎일 시, Coroutine으로 0.2초간 빨갛게 색 변경, 출혈 ParticleSystem 재생
## 10. 모바일 가상 컨트롤러
> 화면의 원하는 곳을 터치 - 드래그하여 가상 컨트롤러 활성화
## Screen Shots
## Assets Credit
> Please write down the credit when using this project
### - Graphics
Monsters_Creatures_Fantasy - Luiz Melo - [Unity Asset Store Link](https://assetstore.unity.com/packages/2d/characters/monsters-creatures-fantasy-167949)
Hero Knight - Pixel Art - Sven Thole - [Unity Asset Store Link](https://assetstore.unity.com/packages/2d/characters/hero-knight-pixel-art-165188)
Pixel Art Top Down - Basic - Cainos - [Unity Asset Store Link](https://assetstore.unity.com/packages/2d/environments/pixel-art-top-down-basic-187605)
### - Code
SikPang - https://github.com/SikPang/Unity_VampireSurvivors_Copy