분류 전체보기(166)
-
[MSW] 부분적 싱글 플레이 게임 개발을 위한 공부
월드 인스턴스는 유저가 모두 이탈하면 파괴되는데,일정 시간이 지나면 더 이상 신규 유저를 받지 않음으로써 은퇴 준비를 한다. 유저는 은퇴 준비를 하지 않고 있는 월드 인스턴스 중 유저수가 가장 많은 곳으로 보내진다. 아래는 월드 인스턴스 중 하나이다. 룸서비스.RoomServiceRoomService는 인스턴스 룸을 생성, 파괴하거나 유저를 특정 인스턴스 룸으로 옮길 수 있다.인스턴스 룸 안에 있는 유저는 그 룸 안에 있는 맵 간 이동만 가능하다.정적맵으로 되돌아가려 한다면 반드시 RoomService를 통해 이루어져야 한다.다른 인스턴스 룸의 맵으로 직통 이동 또한 불가능하고, 정적 룸으로 돌아간 뒤 다시 인스턴스 룸으로 들어가야 한다. 룸끼리의 통신은 RoomService와 RoomSharedMem..
2024.08.02 -
[MSW] 모험가 키우기 - 8 (스테이지 전환 연출)
모험가 키우기는 스테이지로 구성된 지역을 클리어해나가는 방치형 게임이다. 현재 스테이지의 모든 몬스터를 처치하면 자동으로 다음 스테이지로 넘어가도록 할 예정이다. 그래서 정해진 동선대로 자동 이동을 하도록 맵 곳곳에 트리거들을 배치했다. 이 트리거들은 플레이어가 닿으면 그 플레이어에게 이벤트를 보내 그 트리거에 해당하는 동작을 수행한다. 해당 동작은 StateChangeEvent를 보내 실행되며, 자동 이동은 MovementComponent의 MoveToDirection 함수로 수행한다. 사다리나 로프 동작은 RigidbodyComponent의 AttachTo 함수를 사용하고, 사다리 또는 로프 엔티티에 이벤트를 보내서 사다리 또는 로프가 임의의 방향으로 tween하도록 해서 플레이어가 사다리 또는 로프..
2023.02.24 -
[MSW] 모험가 키우기 - 7 (수치 설정, 스킬시스템 개편)
플레이어가 스킬을 시전할 때, 이펙트의 재생속도와 스킬 동작 애니메이션의 재생속도, 사운드 재생속도, 그리고 데미지가 출력되는 4박자의 타이밍이 일치해야 한다. 그리고 그렇게 일치된 타이밍을 일괄적으로 변경하기 위해서는 기준 수치가 필요한데, 플레이어의 공격 속도 수치를 기준으로 삼을 것이다. 공격 속도는 느려지든 빨라지든 변화가 많은 프라퍼티이다. 최종적으로 결정된 공격 속도로 스킬의 시전시간과 나누기 연산하여 최종적인 스킬 시전 시간을 결정한다. 공격 속도가 빠르면(높으면) 시전 시간이 빨라진다.(짧아진다) 이를 위한 공식 == 스킬 시전 시간 / 공격 속도 4편에서 스킬 시스템 구조를 포스팅했었다. 생각해보니 스킬의 변화량을 스킬에 적용시키려면 이전의 구조로는 불가능해서 이번엔 새로 구상한 구조를 ..
2023.02.17 -
[MSW] 모험가 키우기 - 6 (프로토타입을 위한 전투씬 연출)
익히 알고 있는 방치형 게임의 전투는 자동으로 치러진다. 오늘은 그런 자동 전투를 구현하는 과정을 기록해보겠다. 일단, 몬스터가 죽을 때까지 지속적으로 공격하는 플레이어부터 구현해보자. 그러기 위해선 일정시간마다 적을 공격하는 것을 구현해야 한다. 일단 기본공격을 스킬 시전과 같은 방식으로 수행하겠다. 사거리, 애니메이션 시간, 애니메이션 종류 등등을 고려해야 하지만, 우선은 게임 구실을 하기 위한 정도까지만 구현하겠다. 일단 클래스컴포넌트가 스킬 동작시간을 담을 프라퍼티를 가지고 있다. 이 프라퍼티는 Update문에서 지속적으로 delta값만큼 감소하며 0이 되었을 때 스킬시전이벤트를 만들어 보낸다. 보냄과 동시에 자신의 동작시간 프라퍼티에 방금 시전한 스킬의 동작시간값을 할당한다. 이러면 일정시간마다..
2023.02.11 -
[MSW] 모험가 키우기 -5 (전투 시스템 - 공격과 피격)
핵심은 공격자가 공격을 명중시키면 데미지를 계산해 피격자에게 전달한다. 피격자는 공격을 회피하지 못할 시, 데미지에 자신의 방어력을 적용시킨 후 그 값만큼 피해를 입는다. 일단, 공격 함수는 Native단에 AttackComponent란 곳에 있으므로, AttackComponent를 Extend시켜 사용할 것이다. AttackComponent에는 attack함수를 호출했을 때 내부적으로 호출되어 동작하는 함수들이 있다. 바로 아래에 나온 함수들인데, 아래와 같은 순서로 호출된다는 걸 알아두자. isAttackTarget은 2번 호출되는데, 호출되는 횟수는 공격 범위에 위치한 hitComponent를 가진 엔티티의 개수와 같다. (플레이어도 hitComponent를 가지므로 일단 2번 호출되는 것. 플레이..
2023.01.23 -
[출시 완료][Unity] Tilt Ball 완성시키기
어영부영 미루기만 했던 Tilt Ball을 2022년 10월 31일에 완성시키고, 구글 플레이 스토어에 출시했다. Tilt Ball 개발 중엔 그것에만 집중해서 빨리 끝내고 깔끔하게 다음 것으로 넘어가야 할텐데, 다른 것에 관심이 생기고 한 눈팔다가 이렇게나 완성이 미뤄졌다. 앞으론 데드라인을 정하고 그 기한에 맞추도록 노력할 것이다. Tilt Ball을 마무리 지으려고 마음 먹은 당시엔, 이미 메이플스토리 월드에 매료된 뒤라 Tilt Ball의 마감은 저렴하기 그지 없었다. 그래도 기본적인 UI, 벽이 조각으로 흩어지는 연출(모델을 더 만들기 싫어 전부 똑같은 색이지만), 그리고 레벨디자인(시간이 흐를수록 빨라지는 것뿐이다.)과 오브젝트 풀링을 적용시켰다. 그리고 오랜만에 Tilt Ball에 손대는 만..
2023.01.05