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

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

작성한 질문수

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

Skill (7) - SkillSystem

스킬의 Statemachine에서 변수를 가져오는 방법이 있을까요

작성

·

48

0

너무 많은 질문을 드려서 죄송합니다.

InActionState에서 액션을 추가해서 이벤트를 통해서 SkillSystem에서 이벤트가 호출될때를 이용하려고 하는데 SkillSystem에서 직접적으로 해당 스킬을 가져와서 스킬의 StateMachine을 가져오려고해도 가져올수가 없습니다.

 

애니메이션 이벤트를 활용하는 함수에서
Owner.StateMachine.GetCurrentState() is InSkillActionState ownerState를 이용하면 가져올수있을까 했는데 안되네요


스킬의 statemachine의 내부에 있는 InActionState에서 Entity가 가진 변수를 가져오는건 알겠는데 skillsystem에서 skill의 statemachine에 포함되는 inActionstate의 변수를 가져오는 방법을 잘 모르겠습니다.

답변 2

0

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

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

StateMachine class에

void State<EntityState> GetState<T>(int layer) where T : State<EntityType>
=> stateDatasByLayer[layer][typeof(T).GetType()].State

이 함수를 추가해서 써주시면 StateMachine이 가지고 있는 State를 찾아올 수 있을겁니다.

강의와 관련된 질문은 언제든지 하셔도 됩니다. 다만, 강의에서 말씀드렸듯이 이 강의는 클론 코딩 강의가 아니기 때문에 어려움은 있을지언정 전체 구조를 이해하고 스스로 확장할 수 없다면 의미가 없다는걸 꼭 기억해주시길 바라겠습니다. 스스로 확장하실 수 있도록 꼭꼭 추가적인 공부를 하셔야합니다.

감사합니다.

0

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

InActionState에서 사용한 변수나 기능을 외부에서 가져오는 과정에서 혼란을 겪고 계신 것 같습니다. 특히 스킬의 StateMachine 내에 있는 상태를 외부에서 직접 가져오는 것은 구조적으로 사소한 착각이 있을 수 있습니다. 이 부분을 명확히 하고, 이를 위한 몇 가지 접근 방법을 설명드리겠습니다.

상태 가져오기 방법:

  1. 상태를 추적하는 메서드 활용: StateMachine에 상태 추적을 위한 메서드를 추가하여 현재 활성화된 상태를 외부에서 참조할 수 있게 합니다.
   public class StateMachine<T>
   {
       private Dictionary<int, State> states = new Dictionary<int, State>();
       private State currentState;

       public State GetCurrentState()
       {
           return currentState;
       }

       public State GetState<T>() where T : State
       {
           return states.Values.OfType<T>().FirstOrDefault();
       }
   }
  1. 이벤트 활용: 스킬 시스템과 StateMachine 간의 소통을 위해 이벤트 시스템을 활용할 수 있습니다. 특정 상태로 변환될 때 이벤트를 발생시키고, 이를 사용하여 원하는 작업을 수행할 수 있습니다.

  2. 직접 연결: 필요한 변수나 기능을 StateMachine의 상태 클래스에 직접적으로 연결해 두고, 이 클래스의 인스턴스를 가지고 있는 다른 스크립트에서 접근할 수 있도록 합니다.

예시 코드:

아래는 임의로 SkillSystem에 접근하는 방법의 예시입니다. StateMachine이 현재 상태로 관리하고 있는 InActionState로부터 정보를 접근할 수 있도록 설계할 수 있습니다.

public class SkillSystem
{
    private StateMachine<EntityType> stateMachine;

    public SkillSystem(StateMachine<EntityType> stateMachine)
    {
        this.stateMachine = stateMachine;
    }

    public void CheckInActionState()
    {
        var inActionState = stateMachine.GetState<InActionState>();
        if (inActionState != null)
        {
            // 이 상태에서 필요한 정보를 처리합니다.
        }
    }
}

위와 같은 방법을 통해서 원하는 상태의 변수나 메서드에 외부에서 접근할 수 있습니다.

이해를 돕기 위해 관련된 기존 답변을 참고하실 수 있는 링크를 제공해드립니다:

  • 관련된 기존 질문에서 필요한 정보를 찾으실 수 있습니다. 해당 링크에서는 상태 머신의 상태를 직접 가져오는 방법과 관련된 추가적인 문제 해결이 논의되었습니다.

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

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

작성한 질문수

질문하기