전체 글 68

[Dev Log] Weapon MultiTarget 시스템 추가

작업 내용오늘은 기존 무기들에 MultiTarget시스템을 적용했다. Projectile 타입의 무기에 이미 있는 Multishot과는 다르게 타겟팅 시점에 여러 타겟을 잡고 각 방향으로 발사하는 시스템이다. (Multishot은 그냥 한 방향으로 Spread를 설정해서 쏜다.)Multishot이랑 같이 사용하니 각 방향으로 샷건처럼 쏴재끼는데 뱀서가 그런거 아니겠나. 총알은 많을 수록 좋다.당연히 모든 기능이랑 잘 호환된다. MultiTarget 공통 시스템 구축신규 컴포넌트WeaponMultiTarget public struct WeaponMultiTarget : IComponentData{ public int AdditionalTargetCount;}public struct WeaponAdd..

Game Dev/Dev Log 2026.06.09

[Dev Log] 직접 공격 무기 구현

작업 내용 이전에 매우 간단하게 구현했던 Instnat무기의 시스템을 기존 Projectile / Area 이벤트 스트림 구조에 맞춰 무기 발사, 스폰, 피격, 소비 처리를 분리하였다. 오늘 까지 1차 Feature를 모두 구현하려고 했는데 우선은 여기까지... 특별히 기록할 만한 작업 내용 없이 모두 기존 스트림에 맞춰 다시 한번 Instant 도 맞추었기 때문에 Dev Log에 자세하게 작성할 것도 없다. 계속 구조가 반복되어서 Instant,Projectile,Area무기 모두 공통 구조를 사용할 수 있을 것 같은데 개발 스코프를 맞추려면 그냥 이대로 진행하는게 맞을 것 같다. 이렇게 출시를 목표로 게임을 제작하는것은 처음이고 직장과 병행하다 보니 시간이 많이 없어서 아쉬움이 많이 남는다. 어느정도..

Game Dev/Dev Log 2026.06.08

[Dev Log] Projectile Explosion 기능 추가 및 충돌 판정 트러블슈팅

작업 내용 공통기능으로 만들어 둔 Explosion System을 Projectile에도 적용시켰다. 미리 기능을 많이 만들어 두었기 때문에 이전에 비해 굉장히 간단한 코드만으로 Projectile에도 폭발 효과를 넣을 수 있었다. 물론 아직 VFX같은 이펙트는 넣지 않아서 그냥 거리기반으로 계산만 해서 데미지를 주고 있다. 근데 분명 추가가 잘 되었는데 ProjectileHitSystem (총알 충돌 시스템)이 작동이 잘 안된다..?? DOTS 단점이 디버깅이 참 힘들다는 것이다. 일반 MonoBehaviour였으면 중단점 걸어서 뚝딱 이었을 텐데 이거는 뭐 찾기 너무 힘들었다... 로그를 하나하나 찍어서 원인을 찾았는데 생각했던 것보다 사소한 것이었다.. 일단 완성 gif를 먼저 보면 그동안 만들..

Game Dev/Dev Log 2026.06.06

[Dev Log] Lifetime 이벤트 시스템 도입 및 ExplodeOnExpire 리팩토링

작업 내용푹 쉬었으니 이제 다시 개발을 시작해보자! 기존에 LifetimeSystem에서 엔티티의 수명이 종료되면 직접 폭발을 처리했는데, 목적에 맞게 폭발관련 로직은 제거하고 순수하게 Lifetime관련 기능만 수행하도록 구조를 변경했다. 구현 내용1. Lifetime 종료 이벤트 추가새로운 이벤트 컴포넌트를 정의public struct LifetimeOverEvent : IComponentData{ public Entity SourceEntity; public float3 Position;}수명이 종료된 엔티티의 정보를 이벤트로 전달할 수 있도록 구성 2. LifetimeSystem 책임 분리기존 구조LifetimeSystem├─ Lifetime 체크├─ 폭발 처리└─ 엔티티 제거변경 ..

Game Dev/Dev Log 2026.06.05

[Dev Log] 펄스 + 폭발 기능 추가

작업 내용 펄스 기능 자체는 쉬웠다. 어제 했던 SlowZone의 연장성으로 쉽게 구현을 했는데, ExplodeOnExpire (Explosion)기능을 만들다 보니, 문득 폭발은 모든 오브젝트에서 일어날 수 있는게 아닌가? 하고 생각이나서 일을 크게 벌여 공용 기능으로 만들고 있다. 괜히 개발 스코프 늘려서 제작 기간만 늘어나는게 아닌가 싶긴한데 그래도 한번 해보고 싶어서 오늘 늦게까지 어떻게든 작성은 했다..! 이펙트를 추가한건 아니고, 공용 ExplosiveTag를 만들어 해당 태그가 붙은 모든 오브젝트는 폭발할 수 있게 제작하였다(아직은 미완성이긴 하다.)그를 위해 Projectile과 Area무기에서 따로 적용중이던 ProjectileLifetime과 AreaLifetime을 공통 Life..

Game Dev/Dev Log 2026.05.28

[Dev Log] Area SlowZone Feature 구현 및 Status 시스템 구조 정리

작업 내용 토요일 일요일 월요일 편하게 푹 쉬었다. 요새 오버워치가 그렇게 재밌을 수가 없다.. 그래도 하고싶은 것이 있으니 앞으로는 좀 줄일 생각이다. 오늘은 Area무기의 기능으로 SlowZone을 추가했다. 간단한 효과로, 범위내에 적은 느려지는 효과를 지녔다. 기존 MovementSystem은 건드리지 않고 속도를 조절하기 위해 BaseMoveSpeed 컴포넌트를 새로 생성했고, SystemGroup으로 Stauts관련 SystemGroup을 추가하여 앞으로 스탯 관련 변경사항은 해당 그룹에서 관리할 예정이다. 늘 느끼는 건데, DOTS로 개발을하니 디버깅이 참 힘들다. OOP처럼 하나의 흐름을 따라가는 것이 아니라, 데이터 관점에서 생각을 하다 보니 한번 놓치면 찾기 힘든 느낌이다. 그래도..

Game Dev/Dev Log 2026.05.27

[Dev Log] Area Stat Modifier 시스템 구축 및 판정 구조 개선

작업 내용Area 무기의 Stat을 업데이트할 수 있는 기능을 추가했다. 굉장히 간단한 방식이라 Projectile에도 그대로 적용이 가능하다. Stat Modifier 요청 생성 → ApplySystem에서 적용이 2가지 단계가 끝..!Queue를 사용해서 할 까 생각하다가 요청의 빈도가 매우 낮을 것 같아서 간단한 구조로 구현했다. using Unity.Entities;namespace Game.Gameplay.Weapon.Area.Features.Components{ public enum AreaStatType : byte { RadiusSize, LifeTime, TickInterval, Damage } public enum ..

Game Dev/Dev Log 2026.05.22

[Dev Log] Area Weapon Feature 구조 리팩토링

작업 내용 오늘은 Projectile 구조를 기준으로, Area Weapon도 동일한 방향의 Feature확장 구조로 리팩토링 작업을 진행했다. 데미지 범위와 시각적인 효과가 다른데... 내일 해야지 구조 변경 방향Projectile 구조와 동일하게 다음 흐름으로 변경 시작.AreaFireRequestSystem ↓AreaSpawnRequestQueue ↓AreaSpawnSystem 책임을 다음처럼 분리함.AreaFireRequestSystem발사 가능 여부 판단Spawn Position 계산AreaSpawnRequestData 생성AreaFiredEvent 발행AreaSpawnSystemQueue DequeueArea Entity InstantiateRuntime Component 초기화Fo..

Game Dev/Dev Log 2026.05.20

[Dev Log] 투사체 유도탄 기능 및 Target 선택 설계

작업 내용 오늘은 투사체에 유도기능 (Homing)을 추가했다. 기존에 틀을 잡는데 시간을 들여서 추가 자체는 생각보다 할만했다.사실 추가는 쉬운데 가장 마지막 단계인 Runtime System을 작성하는 것이 조금 시간이 걸린다.1. Weapon Feautre 컴포넌트 생성 (Weapon이 기억할 정보) 2. Feature Runtime 컴포넌트 생성 (Weapon을 통해 발사되는 투사체가 가지고 있을 정보) 3. ProjectileFeatureRegistre에 Runtime컴포넌트 등록 (모든 Feature를 일단 등록) 4. Add Request 컴포넌트 생성 5. Add System 생성 ( Request를 읽고 Weapon Entity에 WeaponProjectileFeature 추가/갱신 6...

Game Dev/Dev Log 2026.05.19

[Tech Notes] Unity DOTS에서의 Object Pooling

배경 기존 OOP 기반 Unity 에서는 다음의 이유로 Object Pooling이 거의 필수 최적화처럼 사용된다.instantiate 비용 높음Destroy 시 GC 발생 가능Renderer / Collider / MonoBehaviour 초기화 비용 큼 특히:BulletVFXEnemyParticle등 짧은 수명의 오브젝트에서 Pooling 사용 빈도가 매우 높다. 그런데 DOTS/ECS에서는 상황이 완전히 다르다. GameObject→ 객체(Object)DOTS Entity→ Chunk 내부의 데이터 구조체 즉, DOTS의 Instantiate/Destroy는 GameObject의 Instantiate/Destroy와 비용 특성이 완전히 다르다. 수 많은 컴포넌트의 집합체인 GameObject와 ..

Game Dev/Tech Notes 2026.05.16