Skip to content

Releases: Overflower706/ovfl-ecs

v1.3.0

Choose a tag to compare

@Overflower706 Overflower706 released this 08 Aug 20:28

v1.3.0 - 성능 개선 및 런타임 타입 지원

# ⚡ OVFL ECS v1.3.0 - 성능 개선 및 런타임 타입 지원

대규모 성능 최적화와 런타임 타입 지원으로 한층 더 강력해졌습니다!

## 🚀 주요 개선사항

### ⚡ 성능 대폭 향상
**컴포넌트 쿼리 최적화: O(n) → O(1)**
```csharp
// 기존: 매번 모든 엔티티 순회
// 개선: 컴포넌트 타입별 엔티티 캐시 활용
var entities = context.GetEntitiesWithComponent<PlayerComponent>(); // 즉시 반환

실제 성능 향상

- 1000개 엔티티 기준 100회 조회 시 100ms 이내 완료
- 시스템 수 증가 시에도 성능 저하 없음
- 매 프레임 검색 비용: O(시스템 수 × 엔티티 수) → O(시스템 수)

###🔧 런타임 타입 지원
Entity.AddComponent() 내부 구현 변경
// Before - 복잡한 리플렉션 코드 필요
var methods = typeof(Entity).GetMethods(BindingFlags.Public | BindingFlags.Instance);
// ...복잡한 리플렉션 로직

// After - 간단한 비제네릭 메서드 사용
entity.AddComponent(notifyComponent); // IComponent 타입으로 직접 추가

### 🏗️ 캐싱 시스템
- Dictionary<Type, HashSet<Entity>> 기반 캐시 구조
- 컴포넌트 추가/제거 시 자동 캐시 업데이트
- Entity 이벤트(OnComponentAdded, OnComponentRemoved)와 연동
- 엔티티 제거 시 모든 관련 캐시에서 자동 정리

### 📈 성능 벤치마크
- GetEntitiesWithComponent<T>(): 기존 대비 10-100배 성능 향상
- 메모리 효율성: 중복 검색 제거로 CPU 캐시 효율성 증대
- 확장성: 대용량 엔티티 환경에서도 일정한 성능 보장

### 📦 설치 방법
https://github.com/Overflower706/ecs.git?path=/Packages/com.ovfl.ecs#v1.3.0

### 🔄 마이그레이션 가이드
기존 코드는 완전히 호환됩니다. 추가된 기능들을 점진적으로 적용하세요

전체 변경사항은 CHANGELOG.md를 참고하세요.

v1.2.0

Choose a tag to compare

@Overflower706 Overflower706 released this 08 Aug 20:25

v1.2.0 - 시스템 인터페이스 개선

# 🔧 OVFL ECS v1.2.0 - 시스템 인터페이스 개선

더 깔끔하고 사용하기 쉬운 시스템 인터페이스로 업데이트되었습니다!

## 🚨 Breaking Changes

### 📝 메서드명 변경
- `Systems.Add()` → `Systems.AddSystem()` (명확성 향상)

### 🏗️ 시스템 인터페이스 개선
**Context 파라미터 제거 - 더 깔끔한 시그니처**
```csharp
// Before
public class MySystem : ITickSystem
{
    public void Tick(Context context) { }
}

// After
public class MySystem : ITickSystem
{
    public Context Context { get; set; }  // 자동 할당
    
    public void Tick() { }  // 파라미터 제거
}

자동 Context 할당
var systems = new Systems()
    .AddSystem<MySystem>()  // Context가 자동으로 할당됨
    .SetContext(context);

### ✨ 주요 개선사항
- 타입 안정성 향상: 컴파일 타임 타입 검사 강화
- 코드 간결성: Context 파라미터 제거로 메서드 시그니처 단순화
- 사용성 향상: 시스템 등록 시 Context 자동 할당

### 📦 설치 방법
https://github.com/Overflower706/ecs.git?path=/Packages/com.ovfl.ecs#v1.2.0

### 🔄 마이그레이션 가이드
1. Systems.Add() → Systems.AddSystem()로 변경
2. 시스템 클래스에 public Context Context { get; set; } 속성 추가
3. 모든 시스템 메서드에서 Context 파라미터 제거
4. 메서드 내에서 this.Context 사용
5. 전체 변경사항은 CHANGELOG.md를 참고하세요.

v1.1.0

Choose a tag to compare

@Overflower706 Overflower706 released this 08 Aug 20:23

v1.1.0 - 제네릭 메서드 지원

# 🚀 OVFL ECS v1.1.0 - 제네릭 메서드 지원

사용성과 성능을 크게 향상시킨 업데이트입니다!

## ✨ 새로운 기능

### 🎯 제네릭 메서드 추가
**AddComponent<T>()** - 더 간편한 컴포넌트 추가
```csharp
// Before
entity.AddComponent(new GridComponent());

// After
entity.AddComponent<GridComponent>();

GetEntitiesWithComponent<T>() - 특정 컴포넌트를 가진 엔티티 조회

// 성능 최적화된 for문 사용
var gameEntities = context.GetEntitiesWithComponent<GameStateComponent>();

Systems.AddSystem<T>() - 제네릭 시스템 등록

// Before
Systems.AddSystem(new DataSystem());

// After
Systems.AddSystem<DataSystem>();

### 📈 개선사항
컴포넌트 추가 시 간결한 문법 지원
타입 안전성 향상
성능 최적화된 엔티티 쿼리

### 📦 설치 방법
https://github.com/Overflower706/ecs.git?path=/Packages/com.ovfl.ecs#v1.1.0

### 🔄 마이그레이션 가이드
기존 코드는 그대로 동작하며, 새로운 제네릭 메서드를 점진적으로 적용할 수 있습니다.

전체 변경사항은 CHANGELOG.md를 참고하세요

v1.0.0

Choose a tag to compare

@Overflower706 Overflower706 released this 08 Aug 20:19

🎉 OVFL ECS v1.0.0 - 초기 릴리즈

Unity용 학습 친화적인 ECS(Entity Component System) 구현체의 첫 번째 릴리즈입니다!

✨ 주요 기능

🏗️ 핵심 아키텍처

  • IComponent 인터페이스: 순수한 데이터 컴포넌트 정의
  • Entity 클래스: 컴포넌트 관리 (추가, 제거, 조회, 존재 확인)
  • Context 클래스: 엔티티 생성 및 관리
  • Systems 클래스: 시스템 등록 및 라이프사이클 관리

🔄 시스템 라이프사이클

  • ISetupSystem: 초기화 시 한 번 실행
  • ITickSystem: 매 프레임 실행
  • ICleanupSystem: Tick 이후 정리 작업
  • ITeardownSystem: 마무리 시 한 번 실행

🛠️ 개발자 친화적 기능

  • 체이닝 메서드: systems.AddSystem(sys1).AddSystem(sys2)
  • 타입 안전성: 제네릭을 활용한 컴파일 타임 타입 검사
  • 학습 친화적: 복잡한 최적화 없이 ECS 개념에 집중

📦 설치 방법

Unity Package Manager에서 Git URL로 설치:
https://github.com/Overflower706/ecs.git?path=/Packages/com.ovfl.ecs#v1.0.0

🔧 시스템 요구사항

  • Unity 2020.3 이상
  • .NET Standard 2.1 호환

📚 사용 예시

// 컴포넌트 정의
public class HealthComponent : IComponent
{
    public int Health { get; set; }
}

// 시스템 정의
public class HealthSystem : ITickSystem
{
    public void Tick(Context context)
    {
        var entities = context.GetEntities();
        // 로직 처리
    }
}

// 사용
var context = new Context();
var systems = new Systems()
    .AddSystem(new HealthSystem())
    .Setup(context);

전체 변경사항은 [CHANGELOG.md]를 참고하세요.