Unity DOTS/Dots Custom Manual9 UNITY DOTS - Dynamic Buffer Component 에 대해 알아보자. 관리되는 데이터가 저정된 Class 타입에서는 Job, BurtComplie, 멀티스레드 실행 등을 할 수 없다. 이러한 것들을 사용하려면 관리되지 않는 데이터만 저장한 Struct를 사용해야 한다. 즉, List 같은 것을 쓸 수가 없다는 의미인데 그래서 불편하다. 그래서 존재하는 것이 바로 Dynamic Buffer Component 이다. Dynamic Buffer Component 정의하기 // 청크에 16개의 저장 공간을 만든다 [InternalBufferCapacity(16)] public struct MyElement : IBufferElementData { public int Value; } DymicBufferComponent는 IBufferElementData를 상속받아야 한다. Att.. Unity DOTS/Dots Custom Manual 2022. 8. 2. UNITY DOTS - BLOB assets 에 대해 알아보자 BLOB assets은 무엇에 쓰는 물건일까? Blob 자산은 스트리밍에 최적화된 바이너리 데이터 조각입니다. 데이터를 Blob 자산에 기록하면 효율적으로 로드할 수 있고 Entity에 저장된 Compoent에서 참조할 수 있는 형식으로 데이터를 저장합니다. 제한 사항 Blob Asset은 구조체의 구성요소처럼 관리되는 데이터가 포함되면 안 됩니다. (List 같은 것들) 또한 런타임에서 변경되지 않는 읽기 전용 데이터만 포함되어야 합니다. BlobAsset을 생성하는 방법 BlobBuilder 만들기 BlobBuilder.ConstructRoot로 Asset 루트 만들기 데이터 채우기 BlobBuilder.CreateBlobAssetReference 로 BlobAssetReference 만들기 Blob.. Unity DOTS/Dots Custom Manual 2022. 7. 31. UNITY DOTS - IJobEntity Jobs 에 대해 알아보자 IJobEntity? 란 무엇인가? Entities.ForEach처럼 ComponentData를 반복합니다. 다만, IJobEntity는 여러 시스템에서 호출해서 사용할 수 있다는 점입니다. 아래는 IJobEntity의 심플한 샘플입니다. // IJobEntity public partial struct ASampleJob : IJobEntity { // 모든 translation Component에 1를 추가합니다 void Execute(ref Translation translation) { translation.Value += 1f; } } public partial class ASample : SystemBase { protected override void OnUpdate() { // Job 예약 .. Unity DOTS/Dots Custom Manual 2022. 7. 31. UNITY DOTS - Entity Command Buffers 에 대해 알아보자. 무엇에 쓰는 물건일까? 멀티스레드 환경에서는 쓰기 경쟁 문제가 발생할 수 있습니다. 여럿 스레드에서 동시에 하나의 데이터에 쓰기 작업을 하려고 하면 발생하는 문제입니다. 그래서 기본적으로 Unity DOTS(또는 ECS)에서는 여럿 안전장치를 만들어 그러한 경쟁 문제가 발생하지 않도록 조치를 취했습니다. 예로 Entities.ForEach 에서는 쓰기로 명시된 데이터에만 쓰기가 가능하다던가 하는 안전장치가 존재합니다. 그래서 멀티스레드 환경에서도 원활하게 쓰기 작업을 할 수 있도록 만든 것이 Entity Command Buffer 입니다. Entity Command Buffer는 쓰기 작업(+구조변경)이 기록되고 해당 프레임이 완료되면 Entity Command Buffer에 기록된 작업들이 처리되어 경.. Unity DOTS/Dots Custom Manual 2022. 7. 30. UNITY DOTS - EntityQuery에 대해 알아보자 Entity는 Component를 담는 것이자 식별ID를 가지고 있는 녀석이다. 그럼, Query란 무엇일까? 사전적의미는 문의, 의문이다. Query란 특정한 데이터를 보여달라는 요청을 말한다. 즉, 유니티 DOTS에서 EntityQuery란 특정 Component 타입을 가진 Entity리스트를 달라는 의미가 된다. 데이터를 읽거나, 쓰려면 어떤 타입을 가진 Entity를 조회할 것인지 알아야 한다. 이때, 사용하는 것이 바로 EntityQuery라는 것이다. EntityQuery 정의하기 가장 간단하게 EntitiyQuery를 정의하는 방법을 알아보자. RotationQuaternion과 RotationSpeed를 지닌 Entity를 찾는 EntityQuery를 정의해보겠다. EntityQuery .. Unity DOTS/Dots Custom Manual 2022. 7. 27. UNITY DOTS - IJobEntityBatch 에 대해 알아보자 IJobEntityBatch에서 I는 인터페이스를 뜻하는 것일테고 Job은 특정한 단일 작업을 수행하는 작은 단위라는 것이고 Entity는 그릇이고 그럼 Batch는 무엇일까? 사전 의미로는 일괄적으로 처리되는 집단[무리] 동사로는 (일괄처리를 위해) 함께 묶다 Chunk는 여러 Batch가 존재하게 되는데 IJobEntityBatch는 Batch를 활용해서 데이터를 처리한다. IJobEntityBatch 구조체 살펴보기 IJobEntityBatch를 상속받아서 구조체를 정의한다. public struct UpdateTranslationFromVelocityJob : IJobEntityBatch { public ComponentTypeHandle velocityTypeHandle; public Compo.. Unity DOTS/Dots Custom Manual 2022. 7. 27. Entity Profiler Modules에 대해 알아보자 Entity Profiler 창 열기 Window - Analysis - Profiler를 누르거나, 단축키: Ctrl + 7를 눌러 Profiler 창을 열 수 있다. Profiler 창에서 밑으로 내리면 Entities Memory 와 Entitis Strual Changes 가 보이는데 이것들로 Entity와 관련된 성능을 파악할 수 있다. Entitis Strual Changes ECS프레임워크가 Entitiy와 Component를 생성하거나 제거한 시간을 표시하고 구조적 변경이 발생하면 ECS프레임워크가 Entity와 해당 데이터의 전체 복사본을 다른 Archetype으로 이동하기 때문에 이 정보를 보는 것이 유용할 수 있습니다. Entitis Strual Changes에서 표시하는 항목에는 C.. Unity DOTS/Dots Custom Manual 2022. 7. 26. 이전 1 2 다음 💲 추천 글