(위에는 썸네일용 이미지...)
이번 시간에는 이벤트의 이해와 컴포넌트 확장에 대해 배웠다.
이번 강의부터는 난이도가 살짝씩 올라가기 시작한 것 같다. 그래서 놓치지 않고 들으려다보니 시간이 좀 오래 걸렸다,,
바로 배운 내용 정리를 시작해보겠다!
Event란?
객체와 객체간에 주고 받는 어떤 형식
각 엔티티들은 컴포넌트들을 포함하고 있음
어떤 event가 왔을 때 이것을 처리하는 부분을 component내의 로직에 넣음
이벤트 수신 등록을 register, addListener 등으로 함
MOD에서는 entity에 등록을 함
같은 엔티티 내에 있는 컴포넌트끼리 이벤트를 주고 받음
ex) component1에서 이벤트 발생시 component3의 이벤트를 실행시키고 싶음
두 컴포넌트간에 연관이 없기 때문에 컴포넌트에서 바로 호출하지 않고 엔티티를 통해 호출하는 것.
component1이 어떤 타이밍에 의해 엔티티로 발송 → 로그 이벤트를 수신하겠다고 등록한 컴포넌트들에게 이벤트 발송 → 해당 컴포넌트들은 이벤트를 받아서 처리
신호를 보내는 엔티티 쪽에서 컴포넌트들이 이벤트 발송 → 받는 엔티티쪽에서 신호를 받고 이벤트 수행
ex) rabbitEntity쪽으로 이벤트를 쏘면 rabbitComponent가 수신해서 rabbitComponent 안의 로그 메시지가 출력됨
방법1
방법2
위와 같이 엔티티간의 이벤트 수신을 하는 이유: 설계 또는 구조적인 측면
예시
상황 : 비가 온다
운동장에 뛰놀던 아이들도 있을 수 있고 상인도 있을 수 있고 지나가는 행인도 있을 수 있음. 여기에 세차를 하던 사람이 추가된다면?
세차를 하던 사람이 취할 행동을 또 따로 추가해줘야함.
이렇게 어떤 행위들이 추가될 때마다 각각 행동을 추가해줘야함.
규모가 커지면 각 객체에서 따로 처리해야하는 이벤트를 우리가 하나하나 신경 써야 하는데 묶어서 처리하면 일일이 신경 쓸 필요가 없음.
즉, 비가 내린다 는 상황만 주면 각 엔티티들이 알아서 행동을 취할 수 있게끔 프로그래밍.
[정리]
분리되어 있는 환경에서 통신을 할 수 있게 해주는 것 → 이벤트
BaseEnvironment > NativeScripts > MODComponent > TriggerComponent > 마우스 우클릭 > Extend
기존 컴포넌트에서 확장한 형태를 갖게 됨
native에서 기능을 전부 제공하고 있음 → 부가적인 기능을 내가 부여할 수 있음
__base:OnEnterTriggerBody
원래 native에 있는 OnEnterTriggerBody를 호출하지 않고 override void OnEnterTriggerBody를 호출. 또한 기존에 있던 OnEnterTriggerBody를 삭제하고 내 마음대로 동작을 구현할 수 있음.
native의 모든 컴포넌트들을 이렇게 활용할 수 있는 것은 아님. 이렇게 활용할 수 없는 것들도 있음.
충돌했다는 정보만 알려주고 구현은 알아서 해야한다.
모든 컴포넌트에 대해 확장이 가능하고 내가 만든 컴포넌트 또한 확장 가능하다.