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개이상이면 에러를 발생한다.
'Unity DOTS > TIP' 카테고리의 다른 글
UNITY DOTS - Unity.Mathematics.Random 랜덤 사용하기 (0) | 2022.11.28 |
---|---|
UNITY DOTS - 거리 계산하기 (0) | 2022.11.25 |
Unity DOTS(ECS) 에서 Build 하는 방법 (1) | 2022.08.09 |
Unity DOTS(ECS)에선 꼭 Enter Play Mode Options를 활성화하자 (0) | 2022.08.09 |
댓글