[MSW] 메이플스토리 월드 알아두면 유용할 것들

2022. 12. 4. 20:31MSW

※ 본 포스팅은 MSW 공식 디스코드 채널에 있는 개발 가이드 영상의 내용을 정리한 글입니다.

 

 

  • 엔티티 make child model 로 만든 차일드 모델과 오리지널 모델의 차이는
    차일드 모델은 원본 오브젝트를 상속받게 되며 상속이라는 말에 걸맞게
    원본 오브젝트에 컴포넌트가 추가되면 차일드 모델에도 동일하게 추가된다.
  • 모델은 유니티의 프리팹 개념과도 유사하다.
    (차일드 모델 = 원본 프리팹에서 파생된 오브젝트)
    (오리지널 모델 = 오리지널 프리팹)
  • 오리지널 모델이 아닌 차일드 모델은 독자적으로 자신의 컴포넌트를 제거할 수 없고,
    오리지널 모델에서 지워야만 한다.
    (유니티의 프리팹과 마찬가지로 Revert, Apply가 있다.)
  • self'.' 와 self':' 의 차이는 무언가를 지목하는 것과 무언가 호출하는 것의 차이이다.
    따라서 콜백함수를 인자로 넘겨줄 때에는 함수라 해서 콜론을 쓰는 것이 아니라,
    '.'을 쓴다.
  • _SpawnService:SpawnByModelId(id, name, position, self.entity.currentMap(부모설정), "")
    로 유니티의 instantiate와 비슷한 기능을 수행할 수 있다.
  • 메월드에는 값타입과 참조타입이 있는데, 유니티에선 값 타입인 것이
    메월드에선 참조 타입이라 의도하지 않은 커플링 작용이 이루어 질 수 있다.
    예를 들어 메월드에서는 벡터가 참조타입이라 어떤 엔티티의 포지션 값만 가져오려 했던 것이
    해당 엔티티의 포지션을 컨트롤하게 되어 버리기도 한다.
    이 경우, 참조 타입의 값만 가져오고 싶을 때는 대상:Clone()을 사용하면
    커플링 작용이 가상의 클론과 이루어져서 현실의 것은 그대로 보존할 수 있다.
  • 임시변수, wait메서드, 로컬펑션
  • 프라퍼티보다 간단하게 임시변수를 만들어 쓰고 싶을 때는
    self._T.변수이름 = 1 과 같은 방법으로 간단하게 선언해 사용할 수 있다.
    _T 가 내부 임시 변수를 선언한다는 뜻임.
  • _EntityService:Destroy(self.Entity) 유니티의 Destroy Object 와 비슷한 기능.
  • Wait() 메서드는 간단히 쓰기 아주 좋지만 다른 곳에서도 Wait를 쓰거나 복잡하게 얽히게 되면
    처리가 의도한 대로 흘러가지 않는다. 따라서 이 경우에는
    _TimerService:SetTimer(타이머를 실행하는 주체, 실행시킬 콜백함수, 반복시간빈도, 반복여부)
    를 사용하는데, 이는 유니티의 InvokeRepeating과 비슷하다.
  • 로컬 멤버를 선언하여 사용하는 것과 마찬가지로 로컬 펑션을 사용할 수도 있다.
    local function name() ~ end
    이런 식으로 선언하는데, 이 펑션을 콜백함수 타입으로 메서드의 인자로 넘길 경우엔
    self.를 쓸 필요가 없다.