신나는 프로젝트 MOD


MapleStory Worlds Games Blog

잘 만들고 있나?

뭐 지난 5일여간의 MOD 개발 현황을 말하자면 아직 걸음마 단계.
일단 문서랑 동영상 강좌 보면서 이것저것 시도해보고 있다.
방향성 같은건 이미 생각해둔게 있기에 일단은 CI2021 기간동안 필요한 기능부터 익혀볼 생각이다.

만들어본 것들

맵 타일 까는거나 오브젝트 배치하는건 나중에 가서 마무리 작업으로 해도 늦지 않겠다고 판단해 조금만 만졌고,
만져본건 크게 2가지다. 아바타로 npc 만들기대시 기능 구현.

아바타로 npc 만들기

MOD에서라면 인게임의 만렙 유저 아바타 npc처럼 아바타를 이용해 npc를 만들거나 할 수 있을거라 생각했다.
당연히도 제공된 동영상 강좌에서 아바타 리소스들을 불러오는 방법에 대해 언급했고 해당 기능을 이용해 바로 npc 기능을 할 객체를 만들어보기로 했다.

하지만 처음 만들어본 npc는 제대로 지정된 위치에 갖다 붙질 않고 절대 좌표를 일일히 지정해줘야 했었다.
이와 관련해서 소통채널로 문의를 넣어보니 일단 다른 렌더러 오브젝트를 추가해 하나처럼 움직이는 방법으로 임시적인 조치를 하는 것에 대해 설명을 들었고,
위치를 드래그 드롭으로 못 옮기는건 일종의 버그이니 버그 리포팅으로 대응한다고 해주셨다.
아무래도, 제대로 안 옮겨지는게 내가 잘못 해서는 아닌듯.

대시 기능 구현

만들 게임으로 액션을 생각하고 있기에, 대시나 2단 점프 같은 이동기를 넣고 싶었다.
그래서 1차적으로 시도해 본 것이 대시와 공중 대시 만들기.
구상을 하자면, 일단 다음의 조건을 만족해야 했다.

  1. 지상/공중 대시 모두 공유하는 쿨타임이 있다.
  2. 쿨타임 동안엔 키를 눌러도 반응하지 않는다.
  3. 공중 대시엔 횟수 제한이 있어 한번 점프할때 1번만 쓸 수 있다.
  4. 공중 대시 횟수는 땅에 닿으면 초기화된다.
  5. 공중 대시를 쓰는 동안엔 중력 영향을 안 받고 일직선으로 공중에서 이동한다. 1을 만족하는건 어렵지 않았다. 프로퍼티에 쿨타임과 내부 쿨타임을 설정하고 업데이트 때마다 내부 쿨타임을 갱신해 쿨타임이 돌아오면 쓸 수 있게 하는 코드는 간단했다.

문제가 된 건 공중 대시.
공중 대시 변수와 내부 공중 대시 변수를 이용해 활성화/비활성화 알고리즘은 짰지만, 문제는 5번.
어떻게 중력 영향을 안 받게 하느냐였다. 힘을 가하는 함수는 기본 라이브러리에서 제공을 하기 때문에 어렵지 않게 대시하게는 했지만, 중력의 영향을 받다보니 공중 대시를 해도 그냥 떨어져 버리는 것. 문제는 역시 중력이었다.
엔진 내부적으로 중력값이라는 것이 존재해 외부힘에 저항해 현재 운동 상태를 유지하는 관성이 적용되고 있던 것. 그래서 공중 대시를 할 때, 중력값이 적용되지 않도록 대시가 사용된 곳이 공중이면 공중 대시 카운트를 제하는 실행과 함께, 중력값을 없애 중력의 영향을 안 받게 하도록 했는데…
결과는 대실패.

일단 대시로 직선 이동을 하는덴 성공시켰지만, 중력값이 돌아오지 않아 멈추지 않고 공중부양을 해버렸다.
이를 해결하는 방법이 없을까 하다가 찾아낸 것이 바로 타이머. 많은 프로그래밍 언어에서 지원하는 것처럼 MOD 엔진에도 함수 호출에 지연을 주는 타이머가 있었다!
이제 받은 힘을 제거하고 중력을 원래대로 돌리는 함수를 만들어 공중 대시를 할때 타이머로 넣어주면… 일단 내가 원하던 느낌이다!

그렇게 구현한 부분은… 지금까진 이정도다.

dash_aerialdash

더 하고 싶은 것

하지만, 이것들을 만들면서 아무래도 기본적으로 고정된 액션들에 대해 생각하지 않을 수 없었다.
마음같아선 점프에 관련된 액션을 완전히 대체할 스크립트를 짜고 싶지만, 기본적으로 제공되는 액션들은 보호되어 바꿀 수 없는 것 같았다.
할로우나이트마냥 가벼운 조작감을 원하는데 말이지.
아니면 원본 액션을 비활성화하는 방식이라던가 제공해줬으면 좋겠다만, 일단 되는 방향대로 해봐야 할 것 같다.

© 2024 SeokguKim   •  Base Theme  Moonwalk