Unity 2022.3.2f
Entities 1.0.11
public void OnUpdate(ref SystemState state)
{
var ecbSingleton = SystemAPI.GetSingleton<BeginSimulationEntityCommandBufferSystem.Singleton>();
var ecb = ecbSingleton.CreateCommandBuffer(state.WorldUnmanaged).AsParallelWriter();
new CaracterUpdateJob()
{
ecb = ecb,
deltaTime = SystemAPI.Time.DeltaTime,
}.ScheduleParallel();
}
EntityManager나 EntityCommandBuffer를 그대로 Job에 넘길 수 없어서 EntityCommandBuffer.ParallelWriter로 바꿔서 Job으로 넘겨줍니다.
private partial struct CaracterUpdateJob : IJobEntity
{
public EntityCommandBuffer.ParallelWriter ecb;
public float deltaTime;
private void Execute([ChunkIndexInQuery] int sortKey, in Entity refEntity, ref ECSCharacterData refCharacterData, in LocalTransform refTransform)
{
// ... 생략 ... //
if (refCharacterData.isDead == true)
{
if (refCharacterData.deadEffect != Entity.Null)
{
var deadEffectEntity = ecb.Instantiate(sortKey, refCharacterData.deadEffect);
var deadEffectTransform = new LocalTransform()
{
Position = refTransform.Position,
Rotation = refTransform.Rotation,
Scale = refTransform.Scale,
};
ecb.SetComponent(sortKey, deadEffectEntity, deadEffectTransform);
}
if (refCharacterData.dropItem != Entity.Null)
{
var dropItemEntity = ecb.Instantiate(sortKey, refCharacterData.dropItem);
var dropItemTransform = new LocalTransform()
{
Position = refTransform.Position,
Rotation = refTransform.Rotation,
Scale = refTransform.Scale,
};
ecb.SetComponent(sortKey, dropItemEntity, dropItemTransform);
}
ecb.DestroyEntity(sortKey, refEntity);
}
}
}
EntityCommandBuffer.ParallelWriter를 EntityManager처럼 사용하면 됩니다.
메인쓰레드에서 사용하던 EntityManager나 EntityCommandBuffer와 차이점은 sortKey를 받는다는건데, 이미 생성된 Entity의 경우에는 ChunkIndexInQuery 값을 입력하고 새로 생성 할 Entity는 동일한 값만 입력해도 되는 것으로 보입니다. (이 부분 좀 더 정확한 정보를 알고계시다면 댓글로 남겨주세요.)
GitHub - Unity-Technologies/EntityComponentSystemSamples
Contribute to Unity-Technologies/EntityComponentSystemSamples development by creating an account on GitHub.
github.com
'Unity Tips' 카테고리의 다른 글
Unity 2020.2버전 이상에서 빌드 할 때 Spine Mesh 최적화로 느려지는 문제 (1) | 2024.03.17 |
---|---|
NSprites - Unity ECS용 Sprite Renderer, Sprite Animation 프레임워크 (1) | 2023.11.19 |
Unity Entities - System에서 Collections(NativeArray, NativeList ...) Dispose함수를 Job 이후에 실행하는 방법 (0) | 2023.07.04 |
Unity UI RectTransform 적정 사이즈로 설정하기 (0) | 2022.10.09 |
Unity UI LayoutGroup 강제 갱신 (1) | 2022.10.03 |