[업데이트 예정] Unity ECS DOT 1.0v - 실행 준비 및 참고 사항

Changhoony·2022년 11월 18일
0

들어가며.

  • 준비물
  1. 2022.2.0b13 버전 ( 아카이브 ) 설치

  2. PackageManager 설치
    => + 버튼 클릭
    => Add Package By Name
    => com.unity.entities 입력
    => com.unity.entities.graphics 입력

  3. ProjectSetting 설정
    3-1. Player => other settings
    => IL2CPP / .Net FrameWork 설정
    => Scripting Define Symbol에 ENABLE_TRANSFORM_V1 추가 (Translation 사용하려면 써야 함)

3-2 Eidtor => Enter Play Mode Setting
=> Enter Play Mode Option 체크, 그리고 바로 아래 세개 중 Disable Scene Backup 만 체크

반드시 설정해야 됩니다.


Transform 접근

1. Transform


1.1 LocalToWorld.Value => new float4x4(rotation, position)
1.2 LocalToParent.Value => new float4x4(rotation, position)

1.3 LocalToWorld : 월드 기준으로 엔티티의 위치, 회전, 크기 값들이 조정됨.
1.4 LocalToParent : 부모 기준으로 엔티티의 위치, 회전, 크기 값들이 조정됨.

1.5 Scale.Value => Uniform & float
1.6 NonUniformScale.Value => Non Uniform & float3


IAspect 상속 프로퍼티 활용


기본적으로 readonly partial에 , 필드 변수들도 죄다 readonly를 쓴다.

그러므로 IAspect의 특정 변수에 접근할 때, 프로퍼티를 만들어서 사용하면 된다.

ex.

public readonly partial struct PlayerAspect : IAspect
{
	private readonly RefRW<Speed> speed;
    
    // 프로퍼티 리턴 타입은 Speed의 value의 데이터에 따라 맞춘다.
    // 아래 예시 Speed.Value : float일 때,
    public float Speed
    {
    	get => speed.ValueRO;
        set => speed.ValueRW.Value = value;
    }
}

ISystem에서 Query 방법


var query = SystemAPI.QueryBuilder().WithAll<FooTag>().Build();

SystemBase 에서 MonoBehaviour 접근


  • 싱글턴 Instance 활용

List 대신 IBufferDataElement.

[InternalBufferCapacity()]. 이것의 Capacity(16)을 초과하면 기존 청크 외부에 새로운 배열이 만들어진다.

ex.

// it is like to List<CustomBufferElement>

 DynamicBuffer<CustomBufferElement> _buffer;
 
foreach(var item in _buffer)
{
	DoSomeThing()..
}
_buffer.Clear();

참고 사항


  • 엔티티든 기존 유니티 방식이든, 일부 스크립트를 제외하고 커스텀 스크립트는
    반드시 SubScene 내에 존재할 것.
  • 구조체인 Entity의 Null 체크 => Entitiy.Null 사용하기
  • RemoveComponent를 활용하여 상황에 맞는 Tag를 AddComponet 해 줄 수 있음. 상태 패턴에 활용 가능
  • HasComponent를 활용하여 상태 패턴처럼 사용할 수 있음.
  • SharedComponentData 를 활용하면 시스템에서 같은 Component를 가진 엔티티끼리 같은 Chunk에 배치하여 활용할 수 있음.
      
profile
Unity 개발

0개의 댓글