Hybrid ECS
그렇다면 ECS를 프로젝트에 적용하려면 어떻게 해야할까?
원래 사용하던 전통적인 방식인 GameObject & MonoBehavior 을 완전히 없애지 않고 ECS 처럼 사용하는 방법이 있다. New way of CODING in Unity! ECS Tutorial 참고
원래는 speed 변수와 rotation을 갱신해주는 동작이 함께 있다.
using UnityEngine;
public class Rotator : MonoBehaviour
{
public float speed;
// Update is called once per frame
void Update()
{
transform.Rotate(0f, speed * Time.deltaTime, 0f);
}
}
Data는 남기고 ComponentSystem을 상속받은 클래스를 생성해 Behavior를 분리한다.
// 데이터와 ComponentSystem 분리
using UnityEngine;
using Unity.Entities;
public class Rotator : MonoBehaviour
{
public float speed;
}
class RotatorSystem : ComponentSystem
{
struct Components
{
public Rotator rotator;
public Transform transform;
}
// Will run every frame
protected override void OnUpdate()
{
// 영상 설명엔 이렇게 되어있었는데 실제로 해보니 컴파일 에러가 ..
// 일단 이런식으로 behavior를 분리하여 data에 접근
foreach ( var e in GetEntities<Components>())
{
e.transform.Rotate(0f, speed * Time.deltaTime, 0f);
}
}
}
이런 식으로 하면 Pure 한 ECS 방식은 아니지만 기존의 Monobehavior를 완전히 없애지 않고 가지고 갈 수 있음.
Entity Debugger
Entity는 Hierarchy에서 확인할 수 없다. 대신 Entity Debugger 라는 것이 있음.
아래와 같이 3개의 큐브 Entity들이 회전하는 프로젝트를 실행시키면
다음과 같은 Entitiy Debugger 화면을 확인할 수 있다.
-
제일 왼쪽은 System들을 보여준다.
-
해당 System의 영향을 받는 Entity들이다. 3개 Entity가 있는 것을 확인할 수 있다.
-
사용되고있는 Chunk개수를 확인할 수 있다.
관련 내용으로 여기서 더 자세히 잘 설명해주심…
참고 페이지들
전반적으로 ECS를 알고싶으면 이 튜토리얼을..
https://learn.unity.com/tutorial/entity-component-system#5c7f8528edbc2a002053b67b좀 더 자세히 알고싶으면 이분의 설명을…
https://rams3s.github.io/blog/2019-01-09-ecs-deep-dive/#deep-diveECS sample 소스는 여기서 다운..
https://github.com/Unity-Technologies/EntityComponentSystemSamples
'게임 개발 > 유니티 정보' 카테고리의 다른 글
[DOTS] Entity 크기 조정 어떻게 하는건가? 고민 기록 (0) | 2021.01.17 |
---|---|
[Unity] 멀티 스레딩 코드를 안전하게! Job System (0) | 2021.01.10 |
[Unity] DOTS란 무엇인가? Unity ECS 시스템 요약 (1) | 2021.01.09 |
최근댓글