초오오오오오짜개발자의낙서장

게임-토이프로젝트, auto defence 본문

카테고리 없음

게임-토이프로젝트, auto defence

코딩하는곰팅이 2024. 11. 11. 09:17
게임 프로젝트 중 하나인 auto defense

게임 제목  
-   오토 디펜스

기획 의도
-   간단한 게임을 만들어보고자 애니매이션 하는 친구와 협업해 게임을 기획.
-   모바일에서 서비스중인 ‘땡땡마법사’라는 게임을 모티브로 게임을 기획.
-   개발 여건을 생각해 여러 부분을 생략하고 간소화해서 핵심 구조만을 정리해 기획

컨셉
-   중세시대 마법사가 공격해오는 적(몬스터)를 막기위해 성벽위에 위치해 적을 섬멸
-   마법사는 물, 불, 바람, 땅 4가지의 속성을 사용
-   마법사는 기본 공격으로 매직 미사일(투사체)을 사용
-   몬스터가 접근해 마법사가 위치한 성벽을 공격하고 성벽의 내구도가 다되면 게임 종료

주요 플랫폼(지금은 생각 x)
-   1순위 PC
-   모바일(가능하면)
-   전체적인 사양은 크게 필요하지 않을 것으로 판단.
- 최우선 목표는 PC로 구현하기

게임의 특징
-   방치형 게임을 모티브로 했지만 사용자의 개입이 필요하도록 난이도를 설계
-   기본 공격을 제외한 4가지 속성을 사용자가 직접 사용하거나, 오토 모드를 선택하면 자동으로 사용하도록 설정

게임의 기본 구성
-   사용자 쪽으로 45’ 기울어진 탑뷰 형식
-   성벽 위 가운데에 마법사 배치
-   마법사가 가장 가까운 적에게 매직 미사일 시전
-   몬스터를 처치하고 얻은 재화(골드)로 스킬을 업그레이드
-   스킬은 물, 불, 바람, 땅이 있음
-   물 – 시전한 범위의 적에게 디버프(슬로우) 적용 + 일정량의 데미지 (LOL 애니비아 궁 모티브)
-   불 – 시전한 범위의 적에게 큰 데미지를 적용 + 도트딜( 폭발 후 화염 장판)
-   바람 – 시전한 범위의 적에게 일정량의 데미지 + 넉백 ( LOL의 나미 궁 모티브)
-   땅 – 시전한 범위에 벽을 설치해 적을 오지 못하게 만듬 (LOL의 애니비아 빙벽 모티브)
-   초기 버전은 10스테이지까지
-   몬스터 타입 : 근거리(고블린, 오크?), 원거리(고블린 투석병, 오크 투석병) (모델링 에셋이나 애니메이션있으면 적용 없으면.. 적당한 오브젝트 찾기)


테크 to do list

- Must to do
    - 씬 생성
        - 게임 준비 화면
            - play 버튼 배치, 버튼을 누르면 게임 플레이 화면으로 전환.
        - 게임 플레이 화면
            - 맵 구현
            - 현재 스킬렙 상태, 스킬의 쿨타임 시간 표현
        - 레벨업 시 어떤 스킬을 강화할지 선택하는 화면
            - 스킬 버튼4개중 하나를 누르를 방식으로 구성
        - 게임 종료 화면

    - 몬스터
        - 화면 위 사용자가 보이지 않는 영역에 몬스터를 무작위 위치로 스폰 (monster generation)
        - 성벽쪽으로 이동하는 기능 구현
        - 성벽에 가까이 갔을때 성벽을 공격하는 기능 구현
        - 공격했을때 성벽 체력 감소(성벽의 체력이 0 이하가 되는지 확인하는 부분은 어디에 붙혀야 최적화가 될까..?)(성벽이 가지고 있는게 맞다)

    - 플레이어
        - 몬스터가 플레이어가 인지할수 있는 범위 내로 들어오면 공격 대기 큐에 등록
        - 공격 대기 큐 중에서 성벽과 가장 가까운 몬스터 위치를 최선으로 갱신 (갱신 주기는 공격(스킬사용 시) 마다)
        - 공격 시퀀스 쿨타임이 찰때마다 공격 대기 큐에 최상단에 있는 적을 대상으로 공격을 시작
        - 스킬들과 기본 공격들의 쿨타임은 별개
        - 스킬 레벨업시 데미지 증가 쿨타임 감소(제한을 둬야 게임 안터질거 같음. 아마?), 시전 영역 증가(점진적으로 증가)
        - 불스킬 : 마우스 커서를 중심으로 (반지름 : skill_fire_Radius) 크기의 원형 지역에 폭발 데미지 , 불 장판(시간 : skill_fire_floor_time , 도트 딜 : skill_fire_floor_dot_deal) 시전 스킬 레벨에 따라 시전 영역 증가, 데미지 증가.
        - 물 스킬 : 마우스 커서를 중심으로 (반지름 : skill_water_Radius) 크기의 원형 지역에 물벼락 데미지, 물 장판 (시간 : skill_water_floor_time, 슬로우( skill_water_floor_slow_percent)) 시전. 스킬 레벨에 따라 시전영역 증가 슬로우 정도 증가
        - 바람 스킬 : 마우스 커서를 중심으로 (길이: skill_wind_width) 크기의 직사각형 영역이 천천히 위로 이동하면서 몬스터를 밀어내고 데미지를 준다. 넉백은 중복이 되지 않음. 스킬 레벨에 따라 밀어내는 거리, 스킬 시전 영역이 달라짐.
        - 땅 스킬 : 마수그 커서를 중심으로 (길이 : skill_ground_width) 크기의 직사각형 영역이 생성되어 몬스터의 진로를 가로막음. 가로막힌 몬스터는 움직이지 않고 멈춰있음. 몬스터의 몸체가 벽에 충돌시 멈춤. 스킬 레벨에 따라 벽의 길이가 증가.

- Nice To do
    - 씬 생성
        - 게임 플레이 화면
            - 맵구성에 디자인적 요소를 추가해 디테일적으로 있어보이게 구현

    - 몬스터
        - 몬스터 어셋을 찾아서 모델링과 텍스처 이동모션, 공격모션 적용

    - 플레이어
        - 스킬 이펙트 어셋 찾아서 적용해보기
        - 플레이어 어셋 찾아서 모델링 적용

       
* 피드백

- 10/16  
    - 구현에 대한 디테일이 필요하다.
    - 미리 정할수 있는 부분이 있으면 정하자
    - 시각적으로 표시해놓은 그림 같은걸로 표시
    - 키 바인딩 작업
        - 스킬 단축키 설정(Q,W,E,R)
            - 불 : Q
            - 바람 : W
            - 물 : E
            - 땅 : R


    - 게임 루프 구현(시작과 끝)
        - 시작화면
            - 시작 버튼 배치
            - 종료 버튼 배치
        - 게임 씬
            - 준비단계
                - 스테이지 정보 표시 (단계 표시, 몬스터가 총 몇마리 나올지 표시)
               
            - 웨이브 단계
                - 시작
                    - 스테이지 시작이라고 표시
                -
                    - 스테이지 끝이라고 표시
    - 맵 제작
        - 스폰 위치
            - 플레이어의 화면 기준으로 상단에 구현해 보이지 않는 곳에서 스폰 한다음 이동하는식으로 자연스럽게 보이게
        - 공격 위치
            - 사용자가 볼수있는 모든곳은 공격이 가능한 위치

    - 몬스터 제작
        - 몬스터 스폰 시스템(스포너)
            - 스폰위치 영역에서 무작위 위치로 몬스터를 스폰
            - 몬스터를 스폰하는 시간 간격 설정 (monster_spone_cooltime)
            - 어떤 종류의 몬스터(근거리, 원거리)가 스폰될지 정하기 (랜덤하게? 아니면 사전에 정의?)
        - 몬스터
            - 근거리 공격 몬스터
                - 공격
                    - 몬스터가 성벽과 접촉할때 공격을 시작 -> 성벽 체력 감소
                    - 공격 쿨타임
                - 피격
                    - 몬스터가 플레이어로 부터 데미지를 받았을때
                    - 체력 감소
            - 원거리 공격 몬스터
                - 공격
                    - 몬스터와 성벽간의 거리가 일정간격(맵 크기를 보고 정하기)일때 멈춰서 공격 -> 성벽 체력 감소
                    - 공격 쿨타임
                - 피격
                    - 몬스터가 플레이어로 부터 데미지를 받았을때
                    - 체력 감소
            - 이동
                - 목적지
                    - 성벽으로 이동
           

    - 캐릭터로 묶을수도 있다
   
    - 플레이어
        - 공격
            - 자동 공격(passive)
                - 매직미사일
                    - 프로젝타일
                    - 원통형의 오브젝트가 지정한 대상에게 나아간다
                    - 실시간(?) 루프 돌때마다(?) 적 위치 변경에 따른 목적지가 변경되어 이동한다
                    - 속도
                        - passive_attack_object_speed
               
                - 대상 지정
                    - 지정 조건
                        - 범위 내 접근
                        - 성벽과 가장 가까운 적을 우선 타겟팅
                - 공격 주기
                    - 공격 쿨타임 설정


            - 스킬사용(active)
                - 스킬의 형태 잡기
                    - 오브젝트의 설치 형태
                        - 불 : 원형 오브젝트 설치
                        - 물 : 정사각형 오브젝트 설치
                        - 바람 : 직사각형 오브젝트 설치 후 오브젝트가 일정거리 위로 이동
                        - 땅 : 직사각형 오브젝트 설치
                - 스킬 스탯
                    - 대미지
                        - 불 : 최초 폭발시 (100 * skill_level), 불바닥 위에 있을때 대미지 (5 * skill_level)
                        - 물 : 최초 시전시 (50 * skill_level)
                        - 바람 : 설치 후 몬스터에게 넉백을 할때마다 데미지 (10 * skill_level, 몬스터 넉백시)
                        - 땅 : 데미지 존재하지 않음
                    - 쿨타임
                        - 불 : 10초 - (0.5초 * skill_level)
                        - 물 : 10초 - (0.5초 * skill_level)
                        - 바람 : 10초 - (0.5초 * skill_level)
                        - 땅 : 10초 - (0.5초 * skill_level)
                    - 영역
                        - 불 : 원형(크기는 맵 정하고 설정, 맵 사이즈에대한 감이 없음), 스킬 레벨에 따라 반지름 (1+0.N)배 증가
                        - 물 : 원형(크기는 맵 정하고 설정, 맵 사이즈에대한 감이 없음), 스킬 레벨에 따라 반지름 (1+0.N)배 증가
                        - 바람 : 직사각형 (크기는 맵 정하고 설정, 맵 사이즈에대한 감이 없음), 스킬 레벨에 따라 장변 (1+0.N)배 증가
                        - 땅 : 직사각형 (크기는 맵 정하고 설정, 맵 사이즈에대한 감이 없음), 스킬 레벨에 따라 장변 (1+0.N)배 증가
                    - 공격 지속 타입(Tag)
                        - 일회성(one_time)
                            - 한번의 오브젝트 충돌로 사라지고 효과를 줌.
                        - 지속성(persistence)
                            - 오브젝트가 일정 시간 동안 유지, 지속 되는것
                       

                    - 공격주기
                    - 스킬 모양
                    - 밀어내기

                - 적용 방식(스킬을 모듈화)
                    - 단일(기본공격)
                        - 프로젝타일
                        - 몬스터에 닿는 순간 사라짐
                        - 사라짐과 동시에 몬스터의 체력을 감소
                    - 도트 딜
                       
                    - 프로젝 타일(투사체?)
                    - 일회성
                        -
                    - 지속성
                        - 도트딜
                            - 데미지를 주는 오브젝트와 닿아있으면 몬스터에게 데미지를 줌
                            - 데미지를 주는 오브젝트에게 몬스터 오브젝트의 정보가 저장이 되며 충돌 쿨타임 시작
                            - 쿨타임이 0 이하가 되면 몬스터 오브젝트와 데미지를 주는 오브젝트의 충돌을 검사 다시 몬스터에게 데미지를 줌
                            - 쿨타임이 지나도 몬스터가 없으면 데미지를 주는 오브젝트에서 몬스터 오브젝트의 정보 삭제


                - 레벨에 따른 수치 증가
                    - 수치
                    - 방식

                - 종류
                    - 일반공격
                        - 프로젝타일을 생성하고 목적지 or 목적 object
                    -
                        - 효과
                           
                    -
                        - 효과
                    - 바람
                        - 효과
                    -
                        - 효과
                - 스킬 관련 스텟
            - 기타
                - 스킬에 사용되는 오브젝트
                    - 생성되어있는 시간
                    - 이동하는 방향
                    - 이동하는 속도
                    -
   
    - UI 따로
        - 시작화면
        - 준비화면
        - 웨이브 화면
        -