Unity_VampireSurvivors_Copy

뱀파이어 서바이벌 모작 (2022. 07 ~ 2022. 08)
Unity2D C#




1. Object Pooling

Destory의 가비지 컬렉팅과 Instantiate으로 인한 프레임 드랍 방지

  • Dictionary<string, Queue>를 활용하여 시작 시 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

Hero Knight - Pixel Art - Sven Thole - Unity Asset Store Link

Pixel Art Top Down - Basic - Cainos - Unity Asset Store Link

- Code

SikPang - https://github.com/SikPang/Unity_VampireSurvivors_Copy