inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

목표 검색을 위한 TargetSearcher와 Skill 범위 표시를 위한 Indicator

Selct에 대해서 질문드립니다.

해결된 질문

203

최성호

작성한 질문수 10

0

안녕하세요 강사님 궁금한게 있어서 질문 드립니다.
제가 구현하고 싶은 부분은 리그오브 레전드의 스마트키 기능과 같은 부분입니다.

제가 이해한 것이 맞다면 강의 안에서는
Select로 비동기적 처리를 할 때 추가 입력을

고정된 입력값(마우스 클릭)을 받아서 Select의 비동기적 처리를 구현한것으로 이해했습니다.

만약 제가 롤의 SmartKey 기능과 같은 눌렀다가 키를 뗄때(스킬이 등록된 키마다 받아야할 입력이 달라짐)의 입력으로 비동기적 처리를 구현하고 싶다면 어떤식으로 구현해야 할까요?

제가 고민해본 방법은 다음과 같습니다.

  1. Skill에 ReleaseInput()이라는 함수를 만든다.
    그리고 TargetSelectionAction에 똑같은 이름의 ReleaseInput() 함수를 만든다.

  2. ReleaseInput() 함수는 SkillSlot의 바인딩된 키 값을 기준으로 키를 뗄 때 호출된다.

  3. Skill의 RealeseInput()호출되면 Skill -> TargetSearch -> TargetSelectionAction 의 순서로 TargetSelection에 접근하여 TargetSelection의 추가로 만든
    releaseInput()함수를 호출한다.

  4. TargetSelectionAction에 releaseInputOccur이벤트를 만들고 ReleaseInput()함수로 이 이벤트를 Invoke해준다.

  5. "키를 뗌" 액션을 Select의 비동기 방식에서 추가 입력값으로 이용하고 싶다면 releaseInputOccur이벤트에 추가적인 함수를 구독하여 기능을 구현한다.

이런 식으로 생각해봤는데. 제가 아직 이 TargetSearcher 시스템에 이해도가 부족해서, 구현해주신 TargetSearcher 의 흐름을 망치지 않고 추가 기능을 만든 것 인지 아직 헷갈립니다.


그래서 강사님께서 SmartKey방식을 구현하신다면 어떤 방식으로 구현하실지 궁금해서 여쭤봅니다.

unity modules

답변 2

1

Developer G

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

방법은 여러 가지겠지만 여기선 Button에 집중을 해보겠습니다.
Button에 3가지 Input Type을 만들고(Click, Down, Up)
3가지 상태에 따라 Skill을 다르게 실행시키면 될겁니다.

// InputButton.cs

if ((InputType.Click && Input.GetKeyUp(keyCode)) ||
   InputType.Down && Input.GetKeyDown(keyCode))
    skill.Use();
else if (InputType.Up)
{
    if (Input.GetKeyDown(keyCode)
        skill.ShowIndicator();
    else if (Input.GetKeyUp(keyCode))
    {
        skill.HideIndicator();
        skill.UseImmediately(마우스 위치에서 Ray를 쏴 맞은 위치);
    }
}


Code를 적당히 짜보면 위와 같은 형태가 될겁니다. 실제론 훨씬 구조적으로 만들어야겠죠.
Button이 Click이나 Down Type이라면 Use 함수를 통해 TargetSearcher의 비동기 동작에 맡기고,
Up이라면 Key를 눌렀을 때 Indicator로 범위를 보여주고, Key를 뗄 때 UseImmediately 함수로 Skill을 바로 동작시키는 겁니다.
제 기억이 맞다면 롤은 Key를 떼기 전에 Mouse 우클릭을 하면 스킬 발동이 취소되어 Key를 떼도 스킬이 발동하지 않는 것으로 알고 있는데, bool형 변수 같은걸 만들어서 Mouse 동작과 연동해 제어하면 될겁니다.

이는 제 의견을 물으셔서 하나 말씀드린 것 뿐이지 수강생분이 생각하시는 구현이 틀렸다고 말씀드리는게 아닙니다. 이 방식이 나을지 수강생분이 생각하시는 방식이 나을지는 모르는 일입니다. 다만 개인적인 생각으로 Skill 자체보다는 Button를 통해 범용적인 형태로 Smart Key을 구현할 수 있다면 Skill뿐만 아니라 Item이나 여러 Object와의 Interaction에서도 Smart Key를 활용할 수 있겠죠.

감사합니다.

0

최성호

답변 감사드립니다.

말씀 주신 부분을 이해한대로 다시 말해보자면

현재 구현되어있는 targetselectionAction의 select 비동기 함수에 추가적인 경우의 수(스마트키)를 따져 추가적인 처리를 구현하는 것 보다는 select는 그대로 놔두고

skill 외부에서(skill slot)에서 추가적인 입력방식 처리를 구현(입력방식들도 모듈화)하는것이 더 좋은 방향이다.

라고 이해했는데 맞을까요?

1

Developer G

일단은 그렇습니다. 입력에 대한 처리는 입력 쪽에 맡긴다 느낌이죠.
다만 개발에서 절대적인건 없으니 항상 그런건 아닙니다.

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