본문 바로가기

Unity/DOTS

DOTS 학습을 위한 기초 정리 #7 시스템 상태 구성요소

반응형

SystemStateComponents

SystemStateComponentData의 일반적인 목적은 시스템 내부 자원을 추적하고 개별 콜백에 의존하지 않고 필요에 따라 해당 자원을 적절히 작성하고 제거 할 수있는 기회를 제공하는 것입니다.

SystemStateComponentData그리고 SystemStateSharedComponentData는 정확히 ComponentData그리고 SharedComponentData와 동일하게 동작하지만 단 중요한 한가지만 다릅니다.

  1. SystemStateComponentData 엔티티가 파기 될 때 삭제되지 않습니다.

DestroyEntity는 다음을 의미합니다.

  1. 이 특정 엔티티 ID를 참조하는 모든 구성 요소를 찾으십시오.
  2. 해당 구성 요소를 삭제하십시오.
  3. 재사용을 위해 엔티티 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. 종속성 나빠얌

반응형