[유니티] 턴제 택틱스 게임 만들기 강의 아닙니다(사실 그것도 맞음) 독창적이고 쉽고 멋진 게임아키텍쳐 만드는 법 강의입니다.컨텐츠 기능 추가하며 확장성,재사용성등 증명하는 중
턴제 택틱스 게임을 구현하는 방법 Part1,2 -> 기본 기능, 기본 전투 루프 (뼈대에 해당) 어쩌다 보니 제가 활용할수 있는 에셋들이 늘어나고 업데이트 하고싶은 내용들이 늘어나서 빠른 프로토타입 만들기로 생각하시면 될 것 같습니다. 이 두 파트에서 나온 내용들로 업데이트 된,할 내용들을 대략 어떤 방법으로 구현할건지 유추하실수도 있습니다. ---------------------------------------------------------- 업데이트-> part 1,2에 만든 것들을 바탕으로 심화, 풍부화 cf-> 해당 장르 게임개발에 유익할 내용들 + 알파
드디어 심화에 해당하는 항목들도 나오기 시작합니다.
반응형 상태들을 위한 설계, 구현 시작합니다.(중간 중간 공용 보통 내용들도 진행합니다 #심화# <- 이거 붙는것들만)
언제 구독시켜도 정해둔 순서대로 동작시킬 수 있는 IEnumerator 이벤트를 이용합니다.
(사실 전수업들까지 하던일들과 똑같은데) 더한 IEnumerator들을 우선순위와, 카테고리로 묶고 정렬하여 Consecutive, Parellel하게 해서 쓰는 방식입니다.
다만 초기에 이벤트 구독해지 해지 패턴 적응하기가 좀 걸릴것같은
저 상태들 도전 해보고 싶지 않으시나요? 저들이 구현되면 만드실 택틱스 게임에 상당한 전략성을 추가하실 수 있을 겁니다.
저것들+ 여러분들이 이제 충분히 비슷한것들 구현,추가가 가능해질것이기에,
시스템 변경? 발전(일관성 있는 맥락이라고 생각합니다) 이후부턴 추가거든요.
+저걸 다 따라오고 나면 IEnumerator 이벤트를 이제 웬만한 다른 프로젝트들에도 신나게 적용시킬수
있게 되실 수 있을 것 같습니다.
파트1,2도 이벤트의 IEnumerator화 이벤트를 완벽히 시간제어 하긴 하지만(구독순서대로)<- 이것도 정말 좋아요. 게다가 쉽죠.
하지만 이건 구독순서에 의존하지 않고 알아서 미리 정해둔 순서대로 + 같은 범주는 동시에 진행도 시키고 한 차원 더 위의 것입니다!
🎯 Func<IEnumerator> 우선순위 시스템의 진정한 혁신
📊 기존 시스템 vs 개선된 시스템
💡 기존 시스템의 구조와 한계
기존: 구독 순서 의존 방식
csharp
public event Func<IEnumerator> OnDamageEvent;
// 구독하는 순서가 실행 순서를 결정
OnDamageEvent += ProcessDamage; // 1번째 실행
OnDamageEvent += PlayAnimation; // 2번째 실행
OnDamageEvent += CheckDeath; // 3번째 실행
// 실행
yield return this.ConsecutiveAll(OnDamageEvent.GetInvocationList()
.Cast<Func<IEnumerator>>()
.Select(handler => handler()));문제점:
구독 순서에 따라 실행 순서 결정
코드 위치나 초기화 순서에 의존
복잡한 상호작용에서 순서 제어 어려움
동적 구독 시 예측 불가능한 실행 순서
🚀 개선된 시스템의 혁신성
💎 커스텀 어트리뷰트 기반 우선순위 제어
혁신: 선언적 우선순위 관리
csharp
public event Func<IEnumerator> OnDamageEvent;
// 구독 순서와 무관하게 우선순위로 실행
[EventPriority(1, "Damage")]
IEnumerator ProcessDamage() { }
[EventPriority(3, "Death")]
IEnumerator CheckDeath() { }
[EventPriority(2, "Animation")]
IEnumerator PlayAnimation() { }
// 구독 순서가 바뀌어도 실행 순서는 항상 동일
OnDamageEvent += CheckDeath; // 늦게 구독해도
OnDamageEvent += ProcessDamage; // 1번째 실행
OnDamageEvent += PlayAnimation; // 2번째 실행
// 3번째 실행
🌟 이 혁신의 실제 가치
🎮 복잡한 게임 시나리오에서의 위력
시나리오: 연쇄 반응이 있는 전투
csharp
// 기존 방식: 구독 순서에 민감
OnAttackEvent += ProcessDamage; // 먼저 구독하면 먼저 실행
OnAttackEvent += TriggerCounter; // 반격이 피해보다 늦게 처리
OnAttackEvent += CheckDeath; // 죽음 체크
OnAttackEvent += PlayAnimation; // 애니메이션
// 문제: 초기화 순서나 동적 구독에 따라 실행 순서 변경 가능개선된 방식: 어트리뷰트로 명확한 순서 보장
csharp
[EventPriority(1, "PreProcess")]
IEnumerator CalculateDamage() { }
[EventPriority(2, "Damage")]
IEnumerator ApplyDamage() { }
[EventPriority(2, "Counter")] // 피해와 동시에 반격
IEnumerator TriggerCounter() { }
[EventPriority(3, "PostProcess")]
IEnumerator CheckDeath() { }
[EventPriority(4, "Visual")]
IEnumerator PlayAnimation() { }
// 언제 구독하든, 어떤 순서로 구독하든 실행 순서 동일💡 카테고리 기반 병렬 처리의 혁신
같은 우선순위, 다른 카테고리 = 병렬 실행




