안녕하세요. 기존에 ECS 3D기반으로 개발된 프로젝트를 2D 도트느낌의 게임으로 변환하면서 NSprites라는 라이브러리를 사용했는데 관련해서 주의해야 할 점들 정리해밨습니다. 1. NSprites https://github.com/Antoshidza/NSprites GitHub - Antoshidza/NSprites: Unity DOTS Sprite Rendering Package Unity DOTS Sprite Rendering Package. Contribute to Antoshidza/NSprites development by creating an account on GitHub. github.com 이 Framework는 ECS와 호환되는 Sprite Rendering 시스템 입니다. GP..
런타임에서 ECS와 GameObject 간의 간단한 상호 작용. 1. "Scripts/MonoBehaviours" 폴더에 "CameraSingleton.cs"라는 이름의 새 C# 소스 파일을 만들고 아래 코드를 작성합니다. // main cmaera에 접근하는 방법은 여러 가지가 있지만 싱글톤(여기서 사용하는 대로)을 사용하는 접근 방식은 모든 종류의 MonoBehaviour에서 작동합니다. class CameraSingleton : UnityEngine.MonoBehaviour { public static UnityEngine.Camera Instance; void Awake() { Instance = GetComponent(); } } 2. "SampleScene"의 "Main Camera" Game..
고급 베이킹, 베이킹 시스템 도입. ECS Component들은 렌더링에 사용되는 Shader에 대한 입력을 제어할 수 있습니다. Shader Graph를 통해 자체 Shader를 생성하고 사용자 지정 ECS Component를 해당 입력에 매핑하는 것은 이 Tutorial의 범위를 벗어나지만 URPMaterialPropertyBaseColor라는 Component를 사용합니다. 이름에서 알 수 있듯이 Standard URP Material의 기본 색상을 제어할 수 있습니다. 우리의 탱크는 3개의 요소(탱크, 포탑, 대포)로 구성되며 각 Entity에는 URPMaterialPropertyBaseColor Component가 추가되어야 합니다. 이렇게 하려면 탱크 프리팹을 열고 계층 구조에서 세 가지 요소..
한 번만 실행해야 하는 초기화 시스템 처리. 1. "EntityScene"에서 "Tank" GameObject를 프로젝트 창의 "Assets/Prefabs" 폴더로 드래그 앤 드롭 합니다. 2. "EntityScene"에서 "Tank" GameObject(현재 Prefab Instance)를 삭제합니다. 3. "Scripts/Authoring" 폴더에 "ConfigAuthoring.cs"라는 새 C# 소스 파일을 만들고 아래 내용을 추가합니다. using Unity.Entities; class ConfigAuthoring : UnityEngine.MonoBehaviour { public UnityEngine.GameObject TankPrefab; public int TankCount; public fl..
parallel job을 소개합니다. 1. "Scripts/Aspects" 폴더에 "CannonBallAspect.cs"라는 이름의 새 C# 소스 파일을 만들고 아래 코드를 작성합니다. using Unity.Entities; using Unity.Mathematics; using Unity.Transforms; readonly partial struct CannonBallAspect : IAspect { // 관점의 엔티티 필드는 엔티티 자체에 대한 액세스를 제공합니다. // 예를 들어 EntityCommandBuffer에 명령을 등록하는 데 필요합니다. public readonly Entity Self; // Aspect에는 다른 Aspect가 포함될 수 있습니다. readonly TransformAs..
다른 Entity들을 참조하여 Prefab을 생성합니다. 1. "Scripts/Authoring" 폴더에 "CannonBallAuthoring.cs"라는 이름의 새 C# 소스 파일을 만들고 아래 코드를 작성합니다. using Unity.Entities; using Unity.Rendering; using Unity.Mathematics; class CannonBallAuthoring : UnityEngine.MonoBehaviour { class CannonBallBaker : Baker { public override void Bake(CannonBallAuthoring authoring) { // 기본적으로 Component는 0으로 초기화됩니다. // 따라서 이 경우 CannonBall의 Speed..
SystemBase 및 Entities.ForEach 병렬 처리를 소개합니다. 1. "Scripts/Authoring" 폴더에 "TankAuthoring.cs"라는 이름의 새 C# 소스 파일을 만들고 다음 코드를 작성합니다. using Unity.Entities; class TankAuthoring : UnityEngine.MonoBehaviour { class TankBaker : Baker { public override void Bake(TankAuthoring authoring) { AddComponent(); } } } // 포탑에서 했던 것처럼 탱크(큐브)를 식별하는 Tag Component를 만듭니다. struct Tank : IComponentData { } 2. "Tank" GameObj..
관리되지 않는 시스템(ISystem), 쿼리, 관용적 foreach의 개념을 소개합니다. "Scripts/Systems" 폴더에 "TurretRotationSystem.cs"라는 새 파일을 만들고 거기에 아래 코드를 작성합니다. using Unity.Burst; using Unity.Entities; using Unity.Mathematics; using Unity.Transforms; // ISystem을 기반으로 하는 관리되지 않는 시스템은 BurstCompile 할 수 있지만 아직 기본값은 아닙니다. // 따라서 [BurstCompile] Attribute를 사용하여 명시적으로 BurstCompile을 선택해야 합니다. // 구조체와 OnCreate/OnDestroy/OnUpdate 함수 모두에 추..