SystemStateComponents
SystemStateComponentData의 일반적인 목적은 시스템 내부 자원을 추적하고 개별 콜백에 의존하지 않고 필요에 따라 해당 자원을 적절히 작성하고 제거 할 수있는 기회를 제공하는 것입니다.
SystemStateComponentData그리고 SystemStateSharedComponentData는 정확히 ComponentData그리고 SharedComponentData와 동일하게 동작하지만 단 중요한 한가지만 다릅니다.
- SystemStateComponentData 엔티티가 파기 될 때 삭제되지 않습니다.
DestroyEntity는 다음을 의미합니다.
- 이 특정 엔티티 ID를 참조하는 모든 구성 요소를 찾으십시오.
- 해당 구성 요소를 삭제하십시오.
- 재사용을 위해 엔티티 ID를 재활용하십시오.
그러나 SystemStateComponentData가 존재 하면 제거되지 않습니다. 이렇게하면 시스템이 엔티티 ID와 관련된 모든 자원 또는 상태를 정리할 수 있습니다. 엔티티 ID는 모두 SystemStateComponentData가 제거 된 후에 만 재사용 됩니다.
Motivation
- 시스템은 ComponentData에 기반한 내부 상태를 유지해야 할 수도 있습니다. 예를 들어, 자원이 할당 될 수 있습니다.
- 시스템은 상태를 값으로 관리하고 상태 변경은 다른 시스템에서 관리 할 수 있어야합니다. 예를 들어, 구성 요소의 값이 변경되거나 관련 구성 요소가 추가되거나 삭제 될 때가 있습니다.
- "콜백 없음"은 ECS 디자인 규칙의 중요한 요소입니다.
Concept
SystemStateComponentData의 일반적인 사용은사용자 구성 요소를 미러링하여 내부 상태를 제공 할 것으로 예상됩니다.
예를 들어 :
- FooComponent ( ComponentData, 할당 된 사용자)
- FooStateComponent ( SystemComponentData, 할당 된 시스템)
Detecting Component Add
사용자가 FooComponent를 추가하면 FooStateComponent가 존재하지 않습니다. FooSystem 업데이트는 FooStateComponent없이 FooComponent를 쿼리하고 추가 된 것으로 추정 할 수 있습니다. 이 시점에서 FooSystem은 FooStateComponent와 필요한 내부 상태를 추가합니다.
Detecting Component Remove
사용자가 FooComponent를 제거하면 FooStateComponent가 여전히 존재합니다. FooSystem 업데이트는 FooComponent없이 FooStateComponent를 쿼리하고 제거 된 것으로 추정 할 수 있습니다. 이 시점에서 FooSystem은 FooStateComponent를 제거하고 필요한 내부 상태를 수정합니다.
Detecting Destory Entity
DestroyEntity 실제로는 단축형 유틸리티입니다.
- 주어진 엔티티 ID를 참조하는 구성 요소를 찾습니다.
- 발견 된 구성 요소를 삭제하십시오.
- 엔티티 ID를 재활용합니다.
그러나 SystemStateComponentData제거되지 않고 DestroyEntity엔티티 ID는 마지막 구성 요소가 삭제 될 때까지 재활용되지 않습니다. 이렇게하면 시스템이 구성 요소 제거와 완전히 동일한 방식으로 내부 상태를 정리할 수 있습니다.
SystemStateComponent
SystemStateComponentData는 a ComponentData와 유사하며 유사하게 사용됩니다.
#Code
struct FooStateComponent : ISystemStateComponentData { }
#Code
SystemStateComponentData 의 가시성은 컴포넌트( private, public, internal 사용으로) 와 동일한 방식으로 제어되지만 일반적으로 SystemStateComponentData는 이를 생성하는 시스템 외부에서 ReadOnly가 될 것으로 예상됩니다.
SystemStateSharedComponent
SystemStateSharedComponentData는 SharedComponentData와 유사하며 유사하게 사용됩니다.
#Code
struct FooStateSharedComponent : ISystemStateSharedComponentData { public int Value; }
#Code/
#정리
1. 종속성 나빠얌
'Unity > DOTS' 카테고리의 다른 글
DOTS 학습을 위한 기초 정리 #9 Systems (0) | 2019.05.25 |
---|---|
DOTS 학습을 위한 기초 정리 #8 동적 버퍼 (0) | 2019.05.25 |
DOTS 학습을 위한 기초 정리 #6 공유된 구성 요소(Shared Component) (0) | 2019.05.24 |
DOTS 학습을 위한 기초 정리 #5 일반 구성 요소 (2) | 2019.05.24 |