해결된 질문
작성
·
50
·
수정됨
0
안녕하세요 강사님 궁금한게 있어서 질문 드립니다.
제가 구현하고 싶은 부분은 리그오브 레전드의 스마트키 기능과 같은 부분입니다.
제가 이해한 것이 맞다면 강의 안에서는
Select로 비동기적 처리를 할 때 추가 입력을
고정된 입력값(마우스 클릭)을 받아서 Select의 비동기적 처리를 구현한것으로 이해했습니다.
만약 제가 롤의 SmartKey 기능과 같은 눌렀다가 키를 뗄때(스킬이 등록된 키마다 받아야할 입력이 달라짐)의 입력으로 비동기적 처리를 구현하고 싶다면 어떤식으로 구현해야 할까요?
제가 고민해본 방법은 다음과 같습니다.
Skill에 ReleaseInput()이라는 함수를 만든다.
그리고 TargetSelectionAction에 똑같은 이름의 ReleaseInput() 함수를 만든다.
ReleaseInput() 함수는 SkillSlot의 바인딩된 키 값을 기준으로 키를 뗄 때 호출된다.
Skill의 RealeseInput()호출되면 Skill -> TargetSearch -> TargetSelectionAction 의 순서로 TargetSelection에 접근하여 TargetSelection의 추가로 만든
releaseInput()함수를 호출한다.
TargetSelectionAction에 releaseInputOccur이벤트를 만들고 ReleaseInput()함수로 이 이벤트를 Invoke해준다.
"키를 뗌" 액션을 Select의 비동기 방식에서 추가 입력값으로 이용하고 싶다면 releaseInputOccur이벤트에 추가적인 함수를 구독하여 기능을 구현한다.
이런 식으로 생각해봤는데. 제가 아직 이 TargetSearcher 시스템에 이해도가 부족해서, 구현해주신 TargetSearcher 의 흐름을 망치지 않고 추가 기능을 만든 것 인지 아직 헷갈립니다.
그래서 강사님께서 SmartKey방식을 구현하신다면 어떤 방식으로 구현하실지 궁금해서 여쭤봅니다.
답변 2
1
수강해주셔서 감사합니다.
방법은 여러 가지겠지만 여기선 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)에서 추가적인 입력방식 처리를 구현(입력방식들도 모듈화)하는것이 더 좋은 방향이다.
라고 이해했는데 맞을까요?
일단은 그렇습니다. 입력에 대한 처리는 입력 쪽에 맡긴다 느낌이죠.
다만 개발에서 절대적인건 없으니 항상 그런건 아닙니다.