오늘은 진짜 응-애 그 자체임.


원래 AI 만들던 거나 마저 짜려고 했는데, 상태이상이랑 공격 시스템을 먼저 생각하고 들어가야 될 것 같아서 급선회했음.


슥 보고 '이 병신 왜 이걸 이따구로 했지?' 싶은 거 있으면 가감없이 말해주면 좋겠음.


일단 지금 대충 생각해놓은 걸 말하자면


공격이 크게 두 가지 요소가 있음.

1. 데미지

2. 상태이상


예를 들어 일반 화살은 데미지만 가하지만, 불화살은 화상 상태이상 축적치를 더할 거임.


이러면 공격을 가할 때, 전해야 할 데이터가 늘어남.

1. 공격자

2. 데미지

3. 상태이상

4. 상태이상 축적치


그래서 열거형 하나랑, 구조체 하나를 추가로 만듦.


public enum EffectType

{

None = 0,

Burn = 1,

Freeze = 2,

Stun = 4,

Sleep = 8,

}


public struct DamageData

{

public TestUnit attacker;

public int damage;

public EffectType effectType;

public int effectValue;

}


그래서 구조체를 하나 만들었음.

공격받는 유닛은 해당 구조체를 받고, 그에 맞는 처리를 함.


대충 생각한 상태이상 종류는 아래와 같음.



화상

축적치가 일정 이상 올라가면 지속적인 데미지

축적치가 일정 이상 올라가면 폭발뎀, 이후 축적치 초기화

동상치를 내림


동상

축적치에 따라 슬로우

축적치가 일정 이상 올라가면 완전 이동 불가, 이후 축적치 초기화

화상치를 내림


축적치가 있는 동안 지속적인 데미지.

축적치가 일정 이상 차더라도 차이는 없음.


기절

축적치가 일정 이상 올라가면 일정 시간 완전 멈춤. 이후 축적치 초기화


수면

축적치가 일정 이상 올라가면 일정 시간 완전 멈춤. 이후 축적치 초기화

완전 멈춤 상태에서 데미지를 입으면 바로 깨어남.


공포

축적치가 일정 이상 올라가면 일정기간 사기를 0으로 만듦. 이후 축적치 초기화.

시간이 지나면 공포 이전 사기로 돌아감.


대충 필요한 요소를 생각해보면

  1. 축적치가 있음
  2. 축적치에 따라 차등효과를 받음
  3. 축적치가 일정 이상 차오르면 추가적인 효과를 받음
  4. 축적치는 주기적으로 감소함
  5. 축적치가 초기화되는 조건이 있음
각 상태이상마다 개별적으로 축적치를 관리하고, 각각 다른 효과를 가짐.
그래서 걍 상태이상을 각각 하나의 클래스로 분리하기로 했음.

public abstract class StatusEffect 가 모든 상태이상의 상위클래스고


유닛에서는 상태이상-축적치를 함께 관리해야 함.

Dictionary<EffectType, StatusEffect> statusEffects


StatusEffect

a04834ad162e76b660b8f68b12d21a1d2626a23605

: 필드



a16b25aa2533b47f963310489c01c4731914293d76a4d96430548e093ee2

: 축적치 증가



a04718ac360eb36f9a3330599d22d873132c7b754f1cfccf3e60e3d93f4c

: 효과 메소드.

하위 클래스에서 오버라이딩 해서 사용함.

CriticalEffect는 축적치가 꽉 찼을 때 호출되는 메소드

ContinuousEffect는 축적치에 변화가 있을 때마다 호출됨. 예를 들면, 축적치에 따라 슬로우가 걸린다던가, 그럴 때 쓸 예정.


a76d20aa033e76b660b8f68b12d21a1d66e4d3c2

축적치 감소


a14320aa1202b2769e33305958c12a3a233331081d8402b6d6230d

축적치 자연감소. 시간이 지나면 알아서 서서히 감소하도록 해놨음.


이걸 상속한 하위 클래스 중, 화상 이펙트는 아래와 같음.


a04424aa0633b45bba32384c9b3bfc738b48458a8228db031844595ccc


화상 효과는

1. 축적치가 임계를 넘기면 단일뎀을 주고

2. 일정 시간 화상 축적치가 오르지 않고

3. 그 기간동안 화상 도트뎀을 받는 효과를 가짐.

4. 화상 축적치가 쌓이면, 그만큼 동상 축적치가 내려감.



a65229aa0633b2769e33305958c12a3ab603cdef6cf7c79f13b37c



a04424aa0633b3498a323c6d9d3fc47359b77849414460b53f6588ecab55


추가로, 축적치 쌓는 건 Unit.GetDamage() 메소드에서 관할함.

a16b25aa2533b47f96ff5a73eb5bf4ddccabbca0cafbc91cd00ac9f49c5f78f1a306f9edaaf8b7537e



근데 이런 구조로 만들면, 유닛 오브젝트에다가 모든 상태이상 컴포넌트를 붙여줘야 됨.


몰라레후


응애일지 끝. 많은 조언 바람.