inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Khóa học tuyệt đối! Unity6 - ECS/DOTS Programming Masterclass

Logic spawn Entity hàng loạt (2/2)

Instantiate

75

moonfgg

11 câu hỏi đã được viết

0

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

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

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

Câu trả lời 2

0

indiegamemaker

안녕하세요.

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

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

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

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

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

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

0

communityai8509

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

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

1. EntityCommandBuffer를 통한 생성

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

2. EntityManager의 Instantiate

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

차이점 및 선택 기준

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

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

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

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

수박게임 자료 받았는데 plante05, 06이 없습니다.

0

8

1

다음 강의로 뭘들어야 하나요??

0

44

2

14강 녹음이 안되어 있습니다

0

38

1

유니티webgl 과 안티그래비티를 협업시키고 싶습니다.

0

39

2

run() 메서드 안에 지역변수 sum을 사용한 이유

0

76

1

소스를 받을 수 있는 링크가 있을까요?

0

66

2

프로덕션 부분 사용 불가

0

70

2

접근지정자

0

68

2

in-app purchasing 버튼의 install 버튼이 비활성화되어있을때 어떻게 해결해야하나요 ?

0

52

2

중복 코드와 유지보수성 사이에서 어떤 기준으로 리팩토링해야 할지 궁금합니다

0

48

1

유니티 제외 설치한 프로그램들 및 파일 삭제 방법

0

57

1

깃허브에서 콤피유아이 매니저 설치하는게 안됩니다.

0

82

2

5강, 오류 수정과 관련해서

0

65

2

컴퓨터를 껐다가 클로드 코드 다시 키는 방법 알려주세요.

0

64

1

MA-POCA 알고리즘 응용 질문

0

46

1

Pivot을 마우스로 클릭하고 드래그해도 움직이 않아서 혹시 아시는 부분이 있나 해서 문의 남깁니다.

0

54

1

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

0

47

1

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

0

73

3

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

1

43

1

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

0

76

2

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

0

76

1

Scene 전환에서

0

74

1

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

0

117

3

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

1

165

2