inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

절대강좌! 유니티6 - ECS/DOTS 프로그래밍 마스터클래스

Entity 대량 스폰 로직 (2/2)

Instantiate

56

moonfgg

작성한 질문수 11

0

런타임 Entity 생성시 커멘드 버퍼를 이용한다고 하셨습니다.
대량 발사체 구현 파트에서는 발사체를 커멘드 버퍼로 엔티티를 생성하는데, 여기 EnemySpawn에서는 state.EntityManager.Instantiate 으로 생성하네요

어떤 차이점이 있는건가요?

unity unity-dots unity-ecs multithread 유니티6

답변 2

0

이재현

안녕하세요.

둘 다 런타임에 Entity를 생성하는 방법이지만, 사용하는 상황과 목적이 조금 다릅니다.

EntityCommandBuffer(ECB)는 예약해두었다가 나중에 한 번에 처리하는 방식이고 EntityManager.Instantiate()는 그 자리에서 즉시 엔티티를 생성합니다.

총알의 경우 대량으로 생성하기에 ECB를 사용했고, 상대적으로 생성빈도가 낮은 적 생성에는 EntityManager를 사용했습니다. 두가지 방식으로 코드를 설명하기 위함이기도 합니다.

요약 하자면, 다음과 같은 기준으로 사용하시면 되세요.

  • 적은 수(단순로직) : EntityManager.Instantiate

  • 대량생성, 병렬처리, 성능고려 : EntityComandBuffer

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. moonfgg님.

ECS와 DOTS를 활용하여 유니티에서 엔티티를 생성하는 방식에 대한 질문을 주셨습니다. 엔티티 생성 시에는 일반적으로 두 가지 방법을 사용할 수 있으며, 각각의 사용 상황에 따라 적합한 선택이 필요합니다:

1. EntityCommandBuffer를 통한 생성

EntityCommandBuffer는 특히 여러 엔티티의 생성, 변경, 삭제 작업을 모아서 효율적으로 일괄 처리할 때 유용합니다. Job System과 함께 사용하면 메인 스레드에서 직접적인 엔티티 조작을 피할 수 있어 성능을 최적화할 수 있습니다. 이를 통해 데이터 일관성을 유지하고 멀티스레드 실행 시의 데이터 충돌을 방지합니다.

2. EntityManager의 Instantiate

state.EntityManager.Instantiate는 메인 스레드에서 직접 엔티티를 생성하는 방법 중 하나입니다. 즉시 실행되는 방식으로, 특정 시점에서 엔티티를 빠르게 생성해야 할 때 사용됩니다. 필요한 경우 즉각적인 생성이 가능하다는 점에서 편리합니다. 그러나 이는 메인 스레드에서 작업이 이루어져 과도한 사용 시 성능에 영향을 줄 수 있습니다.

차이점 및 선택 기준

  • 성능 및 동기화: CommandBuffer는 멀티스레드 환경에서 안전하며 성능 최적화에 유리합니다. 반면, EntityManager의 직접 사용은 단순하거나 빠른 처리가 필요할 때 선호됩니다.
  • 작업의 성격: 많은 수의 엔티티를 생성/삭제/변경하는 경우 CommandBuffer가 유리하며, 긴급 또는 단일 작업에는 EntityManager가 신속하게 대응할 수 있습니다.

유사한 주제로 질문이 있었던 내용이 있으니 참고하시기 바랍니다:

이해가 된다고 바라고, 추가 질문이 있으시다면 언제든지 이어서 질문해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

카메라가 많아지면 렌더링 비용이 커지나요?

0

28

1

3:56에 폰트 불러온 과정이 궁금합니다 ㅠㅠ

0

35

3

Spider와 Monster 구현 방식을 구분한 이유

1

22

1

Sprute Sheet에 대해서.

0

27

1

ResourceManager 클래스 관련 질문

1

38

2

FBX chan 모델

0

28

1

첨부된 수업자료와 강의 내용이 다릅니다.

0

58

2

몬스터 HP 게이지바 이동

0

24

1

TextMeshPro용 커스텀 한글 2350자.txt 파일은 어디에 있나요?

0

34

1

02-02 NavMesh 응용 캐릭터 멈춤 문제

0

36

1

02-02 NavMesh 응용 캐릭터 멈춤 문제

0

50

2

C#에서의 RAII

0

71

3

Scene 뷰에서 Enemy Entity가 보이지 않는 문제

0

51

2

Lessons 3 & 4 don't have subtitles unfortunately

0

40

1

클로드코드 + 유니티 컨텐츠만들기 응용에 대하여 질문드립니다.

0

76

1

매니저 관련 질문이 있습니다.

0

74

2

유니티 허브 다운로드

1

68

2

비쥬얼 스튜디오에서 unity연결이 없습니다.

0

81

2

UserDataManager 클래스 hasSaveError 처리

0

47

2

제공해주신 자료에 스크립트들이 빠져있습니다

0

45

2

플레이어를 왜 ECS로 만드는 건가요?

0

58

1

Scene 전환에서

0

63

1

Enemy HP 연동 파트에서 Job을 생성후, System에서 Job을 스케쥴링 해야합니다.

0

97

3

ecs관심이 있었는데 강의 잘 보았습니다.

1

148

2