뷰(View)
System에서는 로직을 처리하고 Component에서는 로직 처리에 사용하는 데이터를 포함한다면 View에서는 화면에 렌더링할 객체를 처리합니다.
View = GameObject 로 이해하면 쉽습니다.
ViewResolverSystem
ViewResolverSystem 클래스를 상속해서 View에 대한 처리를 합니다.
다음은 플레이어 캐릭터를 처리하는 PlayerViewResolver 클래스입니다.
PlayerViewResolver.cs
public class PlayerViewResolver : ViewResolverSystem
{
private IGroup _targetGroup = new Group(typeof(PlayerComponent), typeof(ViewComponent));
public override IGroup TargetGroup
{
get { return _targetGroup; }
}
...
public override GameObject ResolveView(IEntity entity)
{
var playerPrefab = Resources.Load("Prefabs/Player") as GameObject;
var gameObject = Object.Instantiate(playerPrefab);
gameObject.name = "Player";
return gameObject;
}
TargetGroup을 재정의해서 PlayerComponent와 ViewComponent를 가지는 Entity의 View에 대한 처리라는 것을 정의합니다.
실제로 프리팹과 같이 렌더링 리소스에 대한 처리는 GameObject 인스턴스를 반환하는 ResolveView 함수를 재정의해서 처리합니다.
PlayerViewResolver.ResolveView 에서는 플레이어 캐릭터의 프리팹을 로딩한 다음 GameObject 인스턴스를 생성하고 이를 반환합니다.
ResolveView 함수가 반환한 GameObject가 ECS 프레임워크에서 Entity의 View로 사용되는 객체입니다.