헤더파일

Little Survivor (안드로이드 게임) 본문

포트폴리오 정리

Little Survivor (안드로이드 게임)

헤더파일 2024. 4. 12. 00:41

로그라이크, RPG 게임플레이가 적용된 뱀파이어 서바이버류 게임입니다. 

구글 스토어 : https://play.google.com/store/apps/details?id=com.soborostudio.littlesavior

다국어 지원

텍스트에 다양한 인자를 넣는 방식과 어느 곳에 쓰여도 유연하게 대응하기 위해 다국어 언어 데이터 및 로컬라이징 시스템을 직접 구현했습니다.

 

퀘스트 및 대화 시스템

Text Animator 에셋을 활용한 대사 및 카메라 연출을 구현했습니다.

 

UI 시스템, 툴팁

UI는 몇가지 타입으로 구분하여 관리했습니다.

1. 스택 형식으로 쌓이고 이전 출력되던 UI는 감추는 Page타입.

2. 스택 형식으로 쌓이지만 이전 출력되던 UI는 감추지 않는 Popup타입

3. 스택으로 관리되지 않고 별도의 영역에서 출력되는 툴팁, Confirm, 시스템 메시지 타입

 

툴팁은 아래와 같이 기본 위치를 얻되 화면 밖으로 나가지 않도록 보정을 했습니다.

        public RectTransform tooltipArea;

        public Vector2 GetTooltipPosition()
        {
            RectTransformUtility.ScreenPointToLocalPointInRectangle(tooltipArea, UiManager.ins.GetLastPointPosition(), UiManager.ins.uiCamera, out var screenPoint);
            return screenPoint;
        }
public void ShowTooltip(string text)
{
    if (text.IsNullOrWhitespace())
        return;
    
    gameObject.SetActive(true);
    textWidget.SetText(text);
    
    var tooltipPos = tooltipArea.GetTooltipPosition();

    var lastPointPos = UiManager.ins.GetLastPointPosition();
    float pivotX = lastPointPos.x / Screen.width;
    float pivotY = lastPointPos.y / Screen.height;

    if (rect == null)
    {
        TryGetComponent(out rect);
    }
    rect.pivot = new Vector2(pivotX, pivotY);
    rect.localPosition = tooltipPos;
}

구글 서비스 연동, 게임 세이브

광고를 위한 Admob연동과 클라우드 저장을 위한 Google Play Games 연동을 진행하였습니다.

다만 Google Play Games의 저장이 신뢰도가 떨어지는 문제(게임 일시정지나 종료 시에 제대로 저장이 안됨)가 있어 따로 로컬 저장 시스템도 구현하였습니다.

로컬 세이브 파일은 Anti-Cheat Toolkit 2023 에셋을 이용해서 암호화하였고 로컬 세이브 파일과 구글 클라우드 저장 파일 중 플레이 시간이 긴 파일을 로드하도록 구현하였습니다.

 

 

보스전

보스전은 탄막 전투를 컨셉으로 구현하였습니다.

탄막 구현 자체는 VariaBULLET2D 에셋을 사용하여 진행하였습니다.

보스의 행동 패턴은 데이터에 의해 제어되도록 하였고 아래와 같은 행동패턴 조합해 몇 초동안 지속할지 기본 규칙으로 잡았습니다.

 

1. 이동 여부 (플레이어에게 이동, 제자리 멈춤)

2. 스킬 사용 여부

3. 지속적으로 플레이어 방향을 업데이트하며 탄환을 발사할 지 여부

4. 체력 퍼센트 (페이즈 구분을 위해)

 

탄환 방향 같은 경우 원으로 돌면 모두 피할 수 있는 문제를 해결하기 위해 플레이어의 현재 이동 방향에 랜덤한 숫자를 더한 위치로 설정하였습니다.

 

 

스킬, 캐릭터 및 일반 몬스터 

오브젝트들은 처음에는 Addressable로 비동기로딩하여 생성하였고 많은 수가 나올 수 있는 적, 스킬 오브젝트들은 ObjectPool로 관리하였습니다.

캐릭터나 일반 몬스터의 스킬들은 데이터로 세세하게 제어하고 싶기도 하고 보스만큼 복잡한 탄막은 필요 없었기 때문에 보스에서 사용한 탄막 에셋을 사용하지 않고 직접 구현했습니다.

데이터로 제어되는 항목은 아래와 같습니다.

 

사거리, 지속시간, 넉백, 관통(최대 몇 번), 바운싱 (최대 몇 번), 이동 속도, 탄창 및 재장전

 

데미지 타입

- 도트

- 스플레시

- 일반

 

이동 방식

- 직선

- 위성 (주위를 공전)

- NWay 탄

- 추적

- 적에게 바로 공격

 

발사 방향

- 랜덤 적

- 랜덤 방향

- 제일 근접 한 적

- 캐릭터 전방

 

 

보너스 스킬

Survivor-Like 적인 요소를 넣기 위해 보너스 스킬을 선택할 수 있도록 하였습니다..

 

드랍 아이템

보너스 스킬로 드랍 아이템 종류를 선택하면 맵에 아이템이 드랍되는데 적이 많기도 하고 정신 없는 상황에 줍기가 쉽지가 않았습니다. 동적으로 인디케이터를 띄워주어 위치 파악을 쉽게 하였고 적당히 다가가면 자석처럼 끌어당겨서 먹도록 하였습니다.

Comments