2015년 10월 13일 화요일

Unreal Engine 4 : 컴포넌트의 속 사정

당연한 이야기지만, 컴포넌트는 정의 되어 있다고 바로 월드에서

이벤트를 받고 작동하는건 아니다.

컴포넌트가 등록이 되는 경우랑 해지가 되는 경우에 어떠한 일이 일어나는지
조금 더 자세히 정리를 해보았다.


[Register]

ActorComponent::RegisterComponent 는 액터 컴포넌트에 대한
렌더 프록시와 피직스 스테이트를 생성한다.

액터가 스폰이 될때 액터 네에 기본 프로퍼티 내에 컴포넌트가 등록이 되어 있다면
자동으로 등록이 된다.

RegisterComponent 를 직접 호출 할 수도 있지만, 오버헤드가 있는 작업이라
꼭 필요할 때만 해야 한다. (여러번 만드는것들은 캐싱해서 사용 하는게 좋을듯)

<ActorComponent::RegisterComponent 플로우>

0. 이것저것 자잘한 체크 (이미 등록 되었나, 월드는 null 인가 etc..)

1. OnRegister(), CreateRenderState(), CreatePhysicsState(), 호출을 위한 ExecuteRegisterEvents() 콜
이 단계에서 OnRegister 이벤트의 경우, 각 컴포넌트마다 상황이 다르겠지만
SceneComponent 의 경우 AttachTo 가 실행이 되는데 이것저것 하는게 많음.

2. Tick 이벤트를 받기위한 RegisterAllComponentTickFunction 콜

3. Initialize 가 안되어 있다면 InitializeComponent() 콜

4. 블루 프린트에 의해 컴포넌트가 생성이 되는 경우, 자식 컴포넌트가 있는 경우라면
자식들 또한 RegisterComponentWithWorld 를 콜


[Unegister]

ActorComponent::UnregisterComponent 는 업데이트, 시뮬레이션, 렌더링을
중지 할 수 있음

<ActorComponent::UnregisterComponent 플로우>

0. 이것저것 자잘한 체크 (이미 등록 되었나, 월드는 null 인가 etc..)

1. 현재 컴포넌트가 UPrimitiveComponent 이라면 IStreamingManager 에 PrimitiveDetached 한다고 알림

2. Tick 이벤트 해제를 위한 RegisterAllComponentTickFunction 을 호출

3. OnUnRegister(), DestroyRenderState(), DestroyPhysicsState() 호출을 위한
ExecuteUnregisterEvents() 호출



<레퍼런스>
https://docs.unrealengine.com/latest/KOR/Programming/UnrealArchitecture/Actors/Components/index.html

댓글 없음:

댓글 쓰기