[MSW] 메이플스토리 월드 Event의 이해와 컴포넌트 확장

2022. 11. 11. 21:10MSW

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

 

 

  • 이벤트란 개체 간의 주고받는 것이라 할 수 있다.
  • Native단의 Event모음이 있다.
  • MyDesk에서 Create EventType을 통해 커스텀 이벤트를 만들 수 있다.
    컴포넌트와 비슷하게 프라퍼티와 펑션이 있다.
  • 만든 이벤트를 컴포넌트의 Entity Event Handler에서 가져다 쓸 수 있다.
    또한 이벤트 정보 패킷? 자체를 변수처럼 이용 가능하다. 
  • 메월드의 이벤트는 엔티티 이벤트 시스템에 의해 동작한다.
    엔티티 이벤트 시스템이란,
    엔티티가 주축이 되어 이벤트를 받는 경비실이 되는 한편,
    컴포넌트는 엔티티에 이벤트를 보내는 택배기사 역할을 한다.
    엔티티에 이벤트가 도착하면, 엔티티는 자신에게 택배 위탁을 맡긴 컴포넌트에게
    택배(이벤트)가 도착했다고 알린다.
    컴포넌트는 택배가 도착함을 알게 되고 그에 따른 행동을 취한다.
  • 경비실에 택배 위탁을 맡기는, 엔티티로부터 이벤트를 수신하도록 등록하는 것이
    컴포넌트의 Entity Event Handler 부분이다.
  • 택배기사가 경비실에 택배를 맡기는 것은, 엔티티에 이벤트를 보내는 것은
    self.Entity.SendEvent(Event객체) 구문에 해당한다.
  • 이벤트 시스템을 활용하면 코드 간소화, 재사용성, 확장성이 좋아진다.
    또한 객체지향의 원칙을 지키게 되므로 관리가 용이하다.
    느슨한 커플링처럼 어떤 코드가 다른 코드의 제약을 받지 않는다.

  • 엔티티 이벤트 시스템에서 엔티티 대신 서비스나 로직 또한 엔티티 취급을 해서
    이벤트를 수신할 수 있다.
  • ConnectEvent란 것이 있다?
    동적으로 접속하거나 연결을 끊거나 하고 싶을 때 사용하는 것이라고 한다.
    자세한 것은 개발자 센터를 참고.
  • 네이티브 컴포넌트와 스크립트가 서로 상호작용, 통신할 수 있는 방법이 이벤트 밖에 없지만,
    사실 한 가지 방법이 더 존재한다.
    바로 컴포넌트 확장인데, 네이티브 컴포넌트를 오른쪽 클릭해 컴포넌트 Extend를 누른다.
    그럼 그것과 동일한 별개의 확장가능한 Extended 컴포넌트를 생성할 수 있다.
    이 컴포넌트에 추가가능한 펑션 목록을 보면 원본 네이티브 컴포넌트의 펑션을
    오버라이드 방식으로 추가할 수 있는데, 추가하게 되는 순간부턴 원본 컴포넌트의 펑션 대신
    오버라이드된 펑션이 대신 호출된다.
    그러나 모든 것들이 이런 식으로 사용가능한 것이 아님을 알아두자.
    (Overridable 펑션은 정해져있다. 네이티브단의 컴포넌트들은 대부분 가능하긴 하다.)
  • 네이티브 컴포넌트 이외에도 모든 컴포넌트를 확장할 수 있는데,
    이는 상속과 비슷한 개념이다.