inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Skill (7) - SkillSystem

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

175

고우진

작성한 질문수 26

0

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

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

 

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


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

unity modules

답변 2

0

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 인턴

안녕하세요, 인프런 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)
        {
            // 이 상태에서 필요한 정보를 처리합니다.
        }
    }
}

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

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

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

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

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