인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

고우진님의 프로필 이미지
고우진

작성한 질문수

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

Skill (7) - SkillSystem

스킬 사용에 관한 질문이 있습니다.

작성

·

51

0

스킬시스템의
public bool Use(Skill skill)

{

skill = Find(skill);

Debug.Assert(skill != null,

$"SkillSystem::IncreaseStack({skill.CodeName}) - Skill이 System에 등록되지 않았습니다.");

return skill.Use();

}
여기에서 스킬을 사용한다는것은 알겠는데 등록되어있는 스킬을 사용하는 방식이 어떤건지 잘 모르겠습니다.

모든 참조를 이용해서 찾아도 스킬테스트에서 사용한 것 말고는 없고 이벤트를 이용한것인가 싶어서 다 찾아보아도 안보여서 질문을 드립니다.

답변 2

1

Developer G님의 프로필 이미지
Developer G
지식공유자

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

Skill은 SkillSlot class에서 할당된 Button(1~9)를 누르면

// SkillSlot.cs 75번 줄
private void UpdateInput()
{

if (skill.IsUseable && Input.GetKeyDown(useKeyCode))
{

skill.Owner.SkillSystem.CancelTargetSearching();

skill.Use();
}
}

위 함수가 실행되어 SkillSlot이 가지고 있는 Skill을 사용하게 됩니다.
SkillSlot이 가지고 있는 Skill은 SkillSystem에 등록된 Skill이기 때문에 따로 찾을 필요가 없어서
SkillSystem을 거치지 않고 가지고 있는 Skill의 Use 함수를 직접 호출합니다.

감사합니다.

고우진님의 프로필 이미지
고우진
질문자

좋은강의 감사합니다.

 

0

안녕하세요, 인프런 AI 인턴입니다. 고우진님.

스킬 시스템에서 스킬을 등록하고 사용하는 방식에 대한 질문을 주셨군요. 스킬 사용의 핵심은 스킬이 시스템에 등록된 후 이를 참조하여 사용할 수 있도록 설정하는 것입니다. SkillSystem에서 Use 메서드를 통해 스킬을 실행할 수 있습니다.

  1. 스킬 등록: 먼저, 스킬이 SkillSystem에 등록되어야 합니다. 이는 보통 SkillSystem의 초기화 과정에서 이루어지며, Register(skill) 같은 메서드를 사용하여 등록됩니다.

  2. 스킬 찾기: Use 메서드의 skill = Find(skill); 라인은 주어진 스킬이 제대로 등록되었는지 판단하기 위해 사용됩니다. 여기서 Find 메서드는 등록된 스킬 목록에서 입력된 스킬을 찾아 반환하는 역할을 합니다.

    • Find 메서드가 스킬을 찾지 못할 경우, Debug.Assert는 오류 메시지를 출력합니다. 이는 개발자가 스킬 시스템이 제대로 동작하도록 체크하는 디버그 도구입니다.
  3. 스킬 실행: 스킬이 유효하게 확인되면, skill.Use();가 호출됩니다. 이 부분에서 스킬의 작동(예: 데미지 적용, 효과 발현 등)이 구체적으로 실행됩니다.

여기서 중요한 점은 Use 메서드가 스킬을 호출할 때 단순히 스킬의 상태를 변경하거나 효과를 발휘할 수 있도록 스킬 클래스가 요구하는 메커니즘을 따라야 한다는 것입니다. 예를 들어, 마나가 충분한지, 쿨다운이 끝났는지 등을 체크한 후 실행되게 할 수 있습니다.

더 알아보기:

이와 유사한 구현 방법에 대해 적 스킬 관련 질문 을 참고하시면 도움이 될 것입니다. 링크에서는 스킬 시스템에서의 스킬 사용과 효과 발현에 대한 예제와 설명을 다루고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

고우진님의 프로필 이미지
고우진

작성한 질문수

질문하기