Giter Site home page Giter Site logo

g's People

Contributors

goodocy avatar skyser2003 avatar todd032 avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

g's Issues

공격에 대한 기능 정의

특정 오브젝트(플레이어, 적, 보스 등등)가 [공격] 이라는 행동을 취하면 공격 오브젝트를 생성한다.

공격 오브젝트는 충돌한 다른 오브젝트에 대해 피격 판정을 실시한다.

공격 오브젝트는 생성될 떄 다음과 같은 정보들을 가지고 생성된다.
공격 오브젝트가 가지는 정보들

  1. 오브젝트 생성자 id - 해당 공격 오브젝트를 생성한 오브젝트에 대한 id
  2. 타격 대상 그룹 id들 - 해당 공격에 타격 될 그룹 id
  3. 타격 대상 제외 id들 - 해당 공격에 타격되지 않을 개별 오브젝트 id
  4. 생성 위치 - 해당 공격 오브젝트가 생성되는 위치
  5. 타격 지속 frame - 해당 공격이 지속되는 공격이라면, 몇 frame간 지속되는지 결정하는 요소
  6. 방향 vector - 이동하는 공격 오브젝트라면, 속도에 대한 vector
  7. 가속도 vector - 가속도에 대한 vector
  8. 시작 vector - 시작 속도
  9. 이동저항력 - 이동 저항력
  10. frame 당 데미지 - frame마다 들어가는 데미지
  11. 타격 대상에게 가해질 힘 vector - 타격되는 오브젝트에 가해질 물리적인 힘.

공격 오브젝트에 피격된 오브젝트는 frame당 데미지, 가해지는 힘에대한 처리를 자체적으로 한다.

추후 다른 특성들 가령 중독량과 같은 것들이 추가 될 수 도 있다.

이 정보에 대한 데이터는 json 형태로 관리하는 것을 추천

[기획] 입력에 대한 이동 방식

다음과 같은 형태의 게임도 테스트 해봐야 함.

  1. 조이스틱을 이용하여 움직이는 게임
  2. 조이스틱 말고 방향을 바꾸는 버튼을 넣어서 테스트 (캐릭터는 항상 전진) -> 3키 게임 (방향전환, 점프, 공격) 혹은 화면 하단 좌에 점프버튼, 우에 공격버튼 그외의 좌에는 왼쪽으로 움직이기, 오른쪽 클릭하면 오른쪽으로 이동.

고려해야 할 것은 모바일에서는 어떠한 입력이 주를 이루는 가에 대한 생각이 먼저 필요함.

최근 모바일 게임 트렌드를 보면 자동 플레이라는 기능이 대부분 존재하는데, 이는 게임 자체를 시뮬레이션 게임으로 전락시키는 경우로 바꿔버림. 그러나 이 게임에서는 그런 자기 중심적인 강함보다는, 타인과 협동하여 보스를 잡는게 주 목적인 게임. 즉, 플레이어가 취하는 행동으로부터 즐거움을 얻었으면 하는 바람.
따라서 자동 전투까지의 입력의 간소화는 아니라고 생각.

일단 1번을 함으로써 얻는 이득에 대해 나열해보자면 다음과 같음.

  1. 세부적인 컨트롤이 가능함으로써 더욱 어려운 보스를 만들 수 있다.
    => 플레이어의 죽음이 없는 게임에서 이러한 움직임은 사실 쓸모가 없을 가능성이 큼.
    ... 더 있나..?
  2. 다양한 플레이어 행동을 넣을 수 있나?(아래로 뛰기 등등)

2번을 취함으로써 얻는 이득은?

  1. 조작의 간편함.
  2. 이동이라는게 자유롭지 않기때문에 보스의 행동을 조금만 어렵게 해도 난이도가 대폭 상승할 가능성.

타이밍 게임(?) 으로써 접근을 해야 할 가능성이 커질지도..

최근 모바일 트렌드로 보면 당연히 2번. 그리고 2번을 취할 경우, 세로로 게임을 제작해도 아무 문제가 없다는 장점이 존재.

현재의 상황에서는 2번이 더 나은 선택같다.

의견 있다면 댓글을 부탁

오브젝트가 움직이는 로직

필요 변수들은 다음과 같다.

  • 속도
  • 가속도
  • 좌우 최대 속도(좌, 우 제한 속도)
  • 이동 저항력
  • 점프력
  • 중력 가속도
  • 최대 낙하 속도

오브젝트는 힘을 받아 가속도를 가지게 된다.
가속도를 가진 오브젝트는 매 시간마다 속도가 바뀌게 되며, 좌우의 이동속도는 최대속도 제한에 걸리게 된다.
이동 저항력 설정을 통해, 더 이상의 힘을 받지 않았을때 서서히 멈추도록 만든다

보스 기능 정의(?)

  1. 전체 체력
  2. 해당 수치가 0이 되면 죽음
  3. 파트 체력
  4. 해당 수치가 0이 되면 해당 파츠에 속해있는 패턴을 실행하지 못함
  5. 파츠가 체력이 달면 그 수치가 그대로 전체 체력에도 반영.
  6. 패턴,....
    3.1 패턴 공격 총 시간
    3.2 공격 오브젝트 생성 data list
  7. 특정 위치를 지정하거나, pivot으로부터 delta pos에 생성. collider 크기 영역, 데미지 등등
    3.3 패턴 발동 조건 파트 id?

방 생성 종류 만들기

방은 최소 1개의 입장과 1개의 퇴장으로 이루어진다.

입장 -> 상하좌우
퇴장 -> 상하좌우

최소한으로 모든 경우의 맵을 만들기 위해서는 4*3
12종류의 맵을 만들어야된다.

입장 | 퇴장
좌 -> 상,우,하
상 -> 좌,우,하
우 -> 상,좌,하
하 -> 좌,상,우

플레이어 공격 정의

  1. 플레이어 약 공격
  2. 플레이어 공격 짧게 키 입력 -> 공격 시전 - > t초 후 공격 오브젝트 생성 -> 약 공격 후 딜레이
  3. 플레이어 강 공격
  4. 플레이어 공격 키 Hold -> 공격 모으는 상태로 돌입 - > 1초마다 1스택이 쌓임.(최대 n 스택) . n 스택이 초과 될 경우 데미지 반감 -> 공격 키 Release -> 강 공격 오브젝트 생성 -> 강 공격 후 딜레이

약 공격 데미지, 공격 속도(시간), 공격 후 딜레이(시간) 설정 가능하도록
강 공격 데미지, n스택 변수 설정, 공격 속도(시간), 공격 후 딜레이(시간)

방 생성 규칙

  1. 방은 N x N의 크기로 생성한다.
  2. 메인 흐름을 지정한다.
  3. 메인 흐름을 토대로 cave를 정해진 규칙에 의해 뚫는다.
  4. 메인흐름에 벗어나는 길들을 지정한다.
  5. 벗어나는 길들을 정해진 규칙에 의해 뚫는다.

규칙

  • 바닥은 최소 1개 최대 5개의 칸으로 이어진다.
  • 높이는 최대 2까지의 높이차가 난다. (진행방향이 위로 향한다면)
  • (진행 방향이 아래로 향한다면) 최대 높이는 5까지 차이날 수 있다.

[프로그래밍] 보스 기능 구현

  1. 보스의 전체 체력
  2. 보스 파트의 체력
  3. 보스 파트의 작동 여부
  4. 보스 파트는 보스가 manage 할 수 있도록 처리.(기획자가 component 추가 / 제거 할 수 있도록 만들어 줄 것)
  5. 캐릭터가 보스 공격하는 기능
  6. 보스가 공격 1을 사용하여 플레이어를 밀쳐내는 기능
  7. 보스가 공격 2를 사용하여 플레이어에게 스턴을 거는 기능.

일반 적 필요 변수들 정의

  1. 체력
  2. 이동속도
  3. 공격 딜레이
  4. 공격 완료 후 몇초간 공격 못하나
  5. 공격력
  6. 공격력
  7. 공격 총 시간
  8. 공격 모션 시작부터 완료까지의 총 시간
  9. 공격 판정 시간
  10. 실제 공격 판정 오브젝트가 생성되는 시간 (공격 시작으로부터 n초 뒤)
  11. 처치시 오브젝트 스폰 테이블

보스전

  1. 솔로 플레이시의 플레이 타임을 10분 정도로 설계

던전 랜덤 생성

  1. 한 던전의 플레이 타임을 최소 2분으로 설계
  2. 다음 던전으로 넘어가는 조건은 무조건 키를 획득하여 여는게 목적.

Spine Atlas 생성 방법론

먼저 기능에 대해 설명

Atlas라는 클래스는 단순히 데이터의 집합체의 역할.
Atlas Region에는 각각의 이미지에 해당하는 정보를 가진 data
ex) 팔은 0,0부터 100, 200까지 와 같은 정보.
Atlas Page는 실제 텍스쳐에 대한 정보
ex) 텍스쳐의 가로, 세로, wrapping 형태 등등.

따라서 다음과 같은 방법으로 스파인에서 사용할 새로운 Atlas를 생성 가능

  1. 합쳐질 Atlas의 Region들 정보를 읽는다.
  2. Region들의 정보를 겹치지 않게끔 좌표를 잘 잡아서 설정해준다.
  3. 해당 재배치된 Region List의 정보에 따라 새로운 Atlas Page 데이터를 생성해주고, 그에 따라 실제 텍스쳐도 생성해준다.
  4. 위에서 생성한 정보들로 새로운 Atlas를 생성한다.

현재 살펴본 내용으로는 다음을 처리하면 목표를 이룰 수 있음.

3이라는 리듬에 초점 맞추기

3이라는 리듬에 포커스를 맞춰 게임을 제작해보자.

  1. 플레이어가 기본적인 스탯으로 연속 공격 가능 횟수가 3회
  2. 처음으로 마딱뜨리는 적을 3대 때리면 죽도록 설계
  3. 체력 풀로 회복하기까지 3초
  4. 3대 맞으면 죽도록 설계
  5. 스태미나 전부 소진후 풀로 채워질때까지 3초
  6. 적들의 공격 딜레이를 3초에 맞춰볼까?

Spine Atlas Binder 고도화

  1. 다수의 Atals에서 한개의 Atlas 생성 (해결)
  2. 위의 해당하는 Atlas를 사용하는 Spine Object들에 대해, 자동으로 새롭게 생성한 Atlas의 정보를 이용하도록 변경해주는 Component가 필요.
  3. 만일 Atlas의 텍스쳐 사이즈가 2048보다 커지는 경우에 처리하는 방식의 설계가 필요.

키 씹히는 현상 지속 발생

키가 씹히는 현상이 지속적으로 발생

인풋을 받는Update와
인풋을 처리하는 FixedUpdate간에 차이로 인해 생기는 문제같음.

플레이어 애니메이션 임시 제작

http://docs.unity3d.com/ScriptReference/Animator.html
SetBool
SetFloat
SetTrigger의 함수를 사용하여 애니메이션이 자동적으로 재생되도록 설정함

현재 가능한 동작 ->
Idle, Walk, Run, Jump_Start, OnAir, Jump_Land, WeakAttack, StrongAttack

Walk,Run은 이동에 사용하는 애니메이션
SetFloat을 사용하여 HorizontalSpeed 의 값을 설정해주면된다.(X축으로 이동하는 속도를 넣어주도록)
SetTrigger을 이용하여 점프가 시작될때 StartJump를 설정해주자.
그리고 공중에 있는 상태로 판단이 되면 IsOnAir를 bool을 통해 true로. 땅에 착지된 상태면 false로 설정
StartWeakAttack과 StartStrongAttack은 각각 약공격, 강공격이 시작될 때 SetTrigger로 설정해주면 된다.

강공격과 같은 경우는 추후에 애니메이션을 더 추가할 예정.

작업 후 close 처리 바람.

사용하는 변수 명들
HorizontalSpeed - float
좌우 이동값 입력
StartWeakAttack - trigger
공격 시작시 설정
StartStrongAttack - trigger
강 공격 시작시 설정
StartJump - trigger
점프 시작시 설정
IsOnAir - bool
공중에 있을 시에 true, 아니면 false
StartHit - trigger
피격시에 설정
IsDown - bool
쓰러진 상태일 경우 설정

스파인 지원되는 기능들 정리

  1. Weapon 장착과 관련된 기본적인 것들은 모두 존재
    Example > Scene > Attributes and AtalsRegions 을 살펴볼것.

AtlasRegionAttacher를 사용하여 가능

  1. 특정 Bone의 Mesh를 다른 오브젝트들과 혼합하는 기능
    Example > Scene > Mix and Match 살펴보기
    CustomSkin과 Chimera라는 예시가 존재

대충 SpineAttachment 의 기능을 사용해서 구현하는듯.

[기획] 움직임에 대한 임시 값 필요

  • 타 게임에서 다음과 같은 정보들을 분석할 필요가 있음.
  1. 기본 이동 속도 값
  2. 점프 지속시간
  3. 점프 높이 값
  4. 캐릭터의 크기와 보스의 크기

다음과 같은 게임을 분석

  1. Super Meat Boy
  2. Castle Crasher
  3. Movie Theater??? 캐슬 크래서 제작사의 후속작
  4. 그 외의 스피디한 느낌의 2D 플랫폼 & 횡스크롤 게임들 아는것 있으면 댓글로 적어주길 바람

기획 - Incremental 형식과 사냥에 대한 고찰

  1. 탭 타이탄과 동일하게 increamental한 게임을 만드는 것이 목표.

  2. 탭 타이탄과는 다르게 돈을 번 뒤 즉시 적용이 아니고, 마을로 돌아 간 뒤 골드를 소비하는 구조이기 때문에 고려해야 할 상황이 생김.

  3. 초반 보스들을 죽이는게 너무 지루하지 않을까?

    일정 환생 횟수 이상일 경우, 아예 처음이 아닌 중간부터 사냥할 수 있도록 밸런스 조정.

이펙트 임시 부여

  1. 모든 공격 이펙트는 Attack_Claw로 표현
  2. 모든 피격 이펙트는 Hit_Normal_1로 표현
  3. 모든 투사체 이펙트는 Attack_Fireball로 표현

점프 기능 정의

점프는 길게 누르면 더욱 높이 증가한다.

기능은 다음과 같은 플로우로 진행된다.

플레이어가 점프 키 입력
-> 키 입력이 n초간 눌러진다 -> n초동안 F의 힘을 위로 받는다.(단 n초는 입력 시간 허용 범위가 제한되어 있음. 일단 0.2초 정도로 설정 바람)
중간에 점프 키 입력이 중지되면 더 이상 위로 힘을 받는 것은 없다.

마을에서 하는 행위 정리

  1. 자기 집 입장
  2. 가장 왼쪽에 카테고리를 정하는 특수한 버튼이 존재.(때릴때마다 무기 -> 헬멧 -> 갑옷 -> 신발 -> 무기) 로 바뀐다
  3. 현재 카테고리에 맞게 자신이 보유하고 있는 아이템들을 정리하여 보여준다.
  4. 상점
  5. 입장하면 카테고리에 상관 없이 랜덤한 아이템 3개가 입고된다.
    던전에 갔다 오면 목록이 바뀌어있음.
  6. 아이템 처분
  7. 필요 없는 아이템을 갈아버리기?? -> 캐쉬로 충전할 수 있는 크리스탈을 얻도록??
  8. 아이템 강화?
  9. 캐릭터 능력치 강화
  10. 해당 집에 들어가면, 허수아비 4종류가 서있는다.
  11. 공격력
  12. 체력
  13. 방어력
  14. 플레이어가 해당 허수아비를 공격하면 해당 능력치가 증가하고, 돈이 빠져나간다.
    만일 충분하지 않은 골드를 들고 있는 상태에서 때리게 된다면 허수아비가 반격한다 ㅋ
  15. 던전 입장
  16. 자신이 원하는 던전의 난이도를 선택한 뒤 입장 할 수 있게끔 해준다.
  17. 저장 관리
  18. 가장 왼쪽에 사다리를 타고 올라가면 클라우드 save / Load기능이 존재 (첫번재는 기다란 사다리)
    그 뒤에는 짧은 사다리로 변경된다. 사용자들에게 실망감을 주지 않기 위해 맨 처음 열 수 있는 보물상자를 지급한다.

아이템 정의

아이템은 크게 2가지로 나뉜다.
[종류]

  1. 소모성 아이템
    ex) 물약, 일시 버프 아이템 등등
  2. 영구성 아이템
    ex) 헬멧, 무기

[획득 방법]

  1. 던전에서 오브젝트가 드랍하는 아이템을 획득
  2. 상점에서 구매

[획득 시 처리]

  1. 소모성 아이템
  • 해당 효과를 적용한다.
  1. 영구성 아이템
  2. 유저 정보에 아이템에 해당하는 index 리스트를 추가해 넣는다.
    만약 장비아이템일 경우 현재 착용하고 있는 아이템이 바닥에 떨어진다.(추후 집에 가서 착용 가능)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.