Unity DOTS/TIP

Unity DOTS(ECS)에서 따라다니는 카메라 만들기

개양반 2022. 8. 9.
728x90

Player(Entity)를 따라다니는 Camera(GameObject)을 만들려고 Camera를 ConvertToEntity로 변환시키면 카메라 랜더링이 없다는 검정화면을 보게 된다. 

Camera Rendering이 Entity 로 전환되면 먹통이 되어서 생기는 문제다. 즉, 카메라는 항상 GameObject로 존재해야 한다. 그러므로 MonoBehaviour 에서 Player(Entity)의 위치 정보를 읽어서 카메라가 따라다니게 만들어야 한다.

 

MonoBehaviour 에서 Player(Entity)를 읽어오는 방법은 여러가지가 있다. 그 중 GetSingletonEntity로 읽어오는 방법에 대해 다루겠다. 

using Unity.Entities;
using Unity.Mathematics;
using Unity.Transforms;
using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    public float3 offset;
    public float3 min;
    public float3 max;

    private Entity Player;
    EntityManager entityManager;

    private void Awake()
    {
        entityManager = World.DefaultGameObjectInjectionWorld.EntityManager;
    }

    private void Start()
    {
        EntityQuery query = entityManager.CreateEntityQuery(typeof(PlayerTag));
        Player = query.GetSingletonEntity();
    }

    void LateUpdate()
    {
        if (entityManager == null || Player == null)
        {
            return;
        }

        Translation entPos = entityManager.GetComponentData<Translation>(Player);
        transform.position = entPos.Value + offset;
    }
}

#코드 설명

Player Query를 만들려면 EntityManager가 필요하고 EntityManager를 사용하려면 어느 World에 속한 EntityManager를 사용할 것인지 먼저 명시해야 한다. GetSingletonEntity는 딱 1개만 존재하는 Entity의 경우 사용할 수 있다. 0개 이거나 2개이상이면 에러를 발생한다.

댓글

💲 추천 글