멋쟁이사자처럼 X 넥슨 MOD Suppoters Hackathon 4주차 회고

ssunn·2022년 6월 2일
0
post-thumbnail

(위에는 썸네일용 이미지...)

이번 시간에는 이벤트의 이해와 컴포넌트 확장에 대해 배웠다.
이번 강의부터는 난이도가 살짝씩 올라가기 시작한 것 같다. 그래서 놓치지 않고 들으려다보니 시간이 좀 오래 걸렸다,,
바로 배운 내용 정리를 시작해보겠다!

Event 시스템

Event란?
객체와 객체간에 주고 받는 어떤 형식

LogEvent

  1. LogEvent 객체 생성

  1. LogEvent에 message property 생성

  1. myComponent 생성 및 Handler와 function 추가

로그 이벤트 주고받기 - 쏘는 주체와 받는 주체가 같은 컴포넌트인 경우

  1. 자신이 엔티티 쪽으로 이벤트를 쏨

  1. 로그 이벤트 받겠다는 핸들러 → 자신의 엔티티쪽으로 등록

핸들러 등록 구조

각 엔티티들은 컴포넌트들을 포함하고 있음

어떤 event가 왔을 때 이것을 처리하는 부분을 component내의 로직에 넣음
이벤트 수신 등록을 register, addListener 등으로 함
MOD에서는 entity에 등록을 함

같은 엔티티 내에서 이벤트를 주고 받을 때

같은 엔티티 내에 있는 컴포넌트끼리 이벤트를 주고 받음

ex) component1에서 이벤트 발생시 component3의 이벤트를 실행시키고 싶음
두 컴포넌트간에 연관이 없기 때문에 컴포넌트에서 바로 호출하지 않고 엔티티를 통해 호출하는 것.
component1이 어떤 타이밍에 의해 엔티티로 발송 → 로그 이벤트를 수신하겠다고 등록한 컴포넌트들에게 이벤트 발송 → 해당 컴포넌트들은 이벤트를 받아서 처리

다른 엔티티끼리 이벤트를 주고 받을 때

신호를 보내는 엔티티 쪽에서 컴포넌트들이 이벤트 발송 → 받는 엔티티쪽에서 신호를 받고 이벤트 수행

ex) rabbitEntity쪽으로 이벤트를 쏘면 rabbitComponent가 수신해서 rabbitComponent 안의 로그 메시지가 출력됨

방법1

  1. RabbitComponent에서 로그 이벤트 등록

  1. MyComponent에서 rabbitEntity쪽으로 로그이벤트 발송 등록

방법2

  1. RabbitComponent에서 로그 메시지 핸들 이벤트와 출력 등록(이 때 BeerEntity로 이벤트 발송 등록x)

  1. BeerComponent에서 등록한 로그 이벤트를 RabbitEntity로 보내 로그 출력

위와 같이 엔티티간의 이벤트 수신을 하는 이유: 설계 또는 구조적인 측면

예시
상황 : 비가 온다
운동장에 뛰놀던 아이들도 있을 수 있고 상인도 있을 수 있고 지나가는 행인도 있을 수 있음. 여기에 세차를 하던 사람이 추가된다면?
세차를 하던 사람이 취할 행동을 또 따로 추가해줘야함.
이렇게 어떤 행위들이 추가될 때마다 각각 행동을 추가해줘야함.
규모가 커지면 각 객체에서 따로 처리해야하는 이벤트를 우리가 하나하나 신경 써야 하는데 묶어서 처리하면 일일이 신경 쓸 필요가 없음.
즉, 비가 내린다 는 상황만 주면 각 엔티티들이 알아서 행동을 취할 수 있게끔 프로그래밍.

[정리]
분리되어 있는 환경에서 통신을 할 수 있게 해주는 것 → 이벤트

Native & Script component

native script의 이벤트 사용 예시

native ↔ script component 오갈 수 있는 방법

  1. 이벤트(위에서 지금까지 설명한 것)
  2. 컴포넌트 확장

컴포넌트 확장

BaseEnvironment > NativeScripts > MODComponent > TriggerComponent > 마우스 우클릭 > Extend

기존 컴포넌트에서 확장한 형태를 갖게 됨
native에서 기능을 전부 제공하고 있음 → 부가적인 기능을 내가 부여할 수 있음

__base:OnEnterTriggerBody
원래 native에 있는 OnEnterTriggerBody를 호출하지 않고 override void OnEnterTriggerBody를 호출. 또한 기존에 있던 OnEnterTriggerBody를 삭제하고 내 마음대로 동작을 구현할 수 있음.

native의 모든 컴포넌트들을 이렇게 활용할 수 있는 것은 아님. 이렇게 활용할 수 없는 것들도 있음.
충돌했다는 정보만 알려주고 구현은 알아서 해야한다.
모든 컴포넌트에 대해 확장이 가능하고 내가 만든 컴포넌트 또한 확장 가능하다.

profile
BackEnd Developer

0개의 댓글