강의

멘토링

커뮤니티

게임 개발

/

게임 프로그래밍

[유니티] 턴제 택틱스 게임 만들기 강의 아닙니다(사실 그것도 맞음) 독창적이고 쉽고 멋진 게임아키텍쳐 만드는 법 강의입니다.컨텐츠 기능 추가하며 확장성,재사용성등 증명하는 중

턴제 택틱스 게임을 구현하는 방법 Part1,2 -> 기본 기능, 기본 전투 루프 (뼈대에 해당) 어쩌다 보니 제가 활용할수 있는 에셋들이 늘어나고 업데이트 하고싶은 내용들이 늘어나서 빠른 프로토타입 만들기로 생각하시면 될 것 같습니다. 이 두 파트에서 나온 내용들로 업데이트 된,할 내용들을 대략 어떤 방법으로 구현할건지 유추하실수도 있습니다. ---------------------------------------------------------- 업데이트-> part 1,2에 만든 것들을 바탕으로 심화, 풍부화 cf-> 해당 장르 게임개발에 유익할 내용들 + 알파

(5.0) 수강평 1개

수강생 39명

난이도 중급이상

수강기한 무제한

새소식 목록
관리
작성

드디어 심화에 해당하는 항목들도 나오기 시작합니다.

반응형 상태들을 위한 설계, 구현 시작합니다.(중간 중간 공용 보통 내용들도 진행합니다 #심화# <- 이거 붙는것들만)

 

언제 구독시켜도 정해둔 순서대로 동작시킬 수 있는 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() { }

// 언제 구독하든, 어떤 순서로 구독하든 실행 순서 동일

💡 카테고리 기반 병렬 처리의 혁신

같은 우선순위, 다른 카테고리 = 병렬 실행

 

댓글