inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

아이템 및 시너지 효과 스킬 적용

해결된 질문

257

MOOOON

작성한 질문수 7

1

롤토체스같은 게임에서 아이템과 증강체 및 시너지 효과 등을 어떻게 구현하면 좋을지 고민하는데 궁금한게 생겨 질문드립니다.

예를 들어, 아이템을 장착하면 8초마다 주변 아군에게 보호막 부여와 같은 것을 구현할 때, 아이템을 장착하면 8초마다 주변 아군에게 보호막을 부여하는 패시브 스킬을 등록하고, 아이템을 해제하면 해당 패시브 스킬을 빼는 방식으로 만들면 될 것 같습니다.

시너지 효과로 3타마다 추가 투사체를 발사하는 효과는 시너지가 발동되면 3타인지 체크하는 UseCondition을 가진 패시브 스킬을 통해 추가 투사체를 발사하게 하면 될 것 같습니다.

그런데, 아이템을 장착하면 해당 캐릭터의 기본 공격 및 스킬이 체력 10% 이하인 적을 처형시키는 효과는 스킬로 구현이 어떻게 될지, 아니면 다른 좋은 방법이 있을지 떠오르지가 않아서 어떻게 구현할 수 있을지 질문드립니다.

unity modules

답변 1

0

Developer G

수강해주셔서 감사힙니다.

적을 처형하는 효과의 경우, onDealDamage처럼 Skill의 Owner가 자기가 공격한 대상을 알려주는 event를 만든 뒤, Effect의 Start 함수 같은 곳에서 해당 event를 구독하여 Owner가 때린 대상의 체력을 확인해서 처형하면 됩니다. 예를 들면 다음과 같습니다.

EffectAction.cs

public override Start(Effect effect)
{
    effect.Owner.Owner.onDealDamage += OnDealDamage;
}

public override bool Apply(Effect effect)
{ 
    // event를 통해 효과를 적용했다면, 상태를 리셋하고 true를 return
    if (isApplied)
    {
        isApplied = false;
        return true;
    }
    return isApplied;
}

public override Release(Effect effect)
{
    effect.Owner.Owner.onDealDamage -= OnDealDamage;
}

public void OnDealDamage(Entity target, float damage);
{
   // 대상 체력이 현재 체력의 10퍼 이하라면 처형
   if (target.Stats.GetValue(hpStat) <= target.Stats.GetMaxValue(hpStat) * 0.1f)
   {
       target.TakeDamage(Onwer.Owner, this, 999999f);
       isApplied = true;
   }
}


위는 예시이기에, 원하시는 기능을 정확히 구현하시려면 Effect의 동작을 좀 더 확장하실 필요가 있을 수도 있습니다.

주의하실 점은 이 경우 스킬, 아이템, Entity가 움직인 오브젝트 등 Entity가 소유한 객체들이 준 Damage도 모두 Entity의 onDealDamage event를 호출할 수 있도록 구조를 만들어주셔야 합니다.

예를 들어, 지금처럼 target의 TakeDamage 함수를 개별적으로 직접 호출하는게 아니라
Owner를 통해서 Damage를 주게 만들어야 합니다.

// param1: causer(여기선 Effect), param2: target, param3: damage
Owner.DealDamage(this, target, 9999f);

TakeDamage 대신 위와 같은 함수를 호출하고, DealDamage 함수 내부에서

{
// ...중략, 공격 강화 스킬 대한 처리와 데미지 공식을 통해 데미지 확정.

// TakeDamage가 방어 공식을 통해 확정한(=실제로 받은) Damage를 onDealDamage 함수에 넘겨줌
float appliedDamage = target.TakeDamage(this, causer, finalDamage);
onDealDamage?.Invoke(target, appliedDamage);
}


이런 식으로 처리해줄 필요가 있습니다.

감사합니다.

0

MOOOON

쿨타임이 0인 패시브 스킬(계속해서 작동)에 해당 이펙트 액션(처형)을 넣어서 아이템을 장착할 시에 해당 스킬을 장착하게 해주면 될까요?

0

Developer G

말씀하신 것처럼 쿨타임 0인 패시브로 만드셔서 그때 그때 Effect를 새로 적용해주셔도 되고, Effect 자체를 적용 횟수가 무한인(=0)인 버프로 만드셔서 아이템 해제시까지 유지되게 만드셔도 됩니다.

방법은 자유롭게 하시면 될 것 같습니다.

다만, 문제가 없을지 꼼꼼히 살펴봐야겠죠.
예를 들어, 앞서 말씀드린 두 방식 모두 Effect가 이미 적용중일 때는 Condition을 통해 Skill이 발동하지 않도록 해야겠죠? 안그럼 Skill이 매 프레임마다 계속 새로운 Effect를 만들어낼테니까요.

Indicator와 SelectionAction 및 SearchAction 간의 관계에 대해 질문있습니다.

0

70

2

ChargingState에서 질문이 있습니다.

0

49

1

Effect.GetData 함수 질문있습니다.

0

45

2

CanTransitionToSelf 질문 있습니다.

0

53

2

Stat의 MaxValue에 관하여 질문이 있습니다.

0

42

1

Stat vs StatScaleFloat

0

75

4

애니매이션 버그가 있는것 같습니다.

0

65

2

StatsOverride질문이 있습니다.

0

50

2

SetBonusValue함수 질문있습니다.

0

46

2

오늘 수강시작한 취준생입니다.

0

49

1

사소하지만 에디터 관련 질문있습니다

0

69

1

스킬시스템을 데이터 테이블화 하는 법에 대해 감이안잡혀서 질문드립니다.

0

146

2

TargetSearcher에 대해서 질문이 있습니다

0

52

1

돌진해서 몸박을하면 피격자를 날리면서 데미지를 입히는 스킬은 이 시스템에서 어떻게 만들 수 있을까요??

0

116

2

스킬 관련 질문입니다

0

110

2

통일된 Stat을 사용하지 않고 모듈화 방식으로 Stats를 만드신 이유가 궁금합니다.

0

152

1

Effect에 기능 확장에 대해서 질문이 있습니다.

0

149

2

SkillData 구조체 질문

0

122

1

스킬트리 저장 질문입니다

0

135

2

BT와 FSM을 활용해 몬스터 AI 구현

0

350

2

MonoStateMachine을 만든 이유가 잘 이해가 가지 않습니다.

0

128

1

근접 콤보 공격을 만들고 싶습니다.

0

153

1

하나의 스킬 내에서 타겟, 이펙트가 여러번 바뀌게 하는 방법이 궁금합니다.

0

190

1

올해에 예정된 새로운 강의가 있으신지요?

0

115

2