This document is about: QUANTUM 2
SWITCH TO

계층적 유한 상태 머신

새로운 HFSM 생성하기

에디터의 탑 바에서 (+) 버튼을 클릭한 후 상태 머신 옵션을 선택합니다.

hfsm 문서 생성

그러면 HFSM 파일을 저장하라는 메시지가 표시됩니다. 원하는 곳에 저장하세요. 이렇게 하면 비주얼 에디터에서 수행한 작업을 유지하는 데 사용되는 데이터 에셋이 생성됩니다.

hfsm 파일

노트: 지금 선택한 이름은 비주얼 에디터에서 수행한 작업을 컴파일할 때 추가로 생성된 다른 데이터 에셋의 이름이 됩니다. 이는 봇을 실제로 구동하는 데 사용되는 데이터 에셋이므로 제안된 이름을 선택할 수 있습니다.

초기 상태

파일을 저장하면 시작할 단일 NewState를 가진 메인 봇 SDK 윈도우가 나타나게 됩니다.

이제 이 초기 상태에 대해 자세히 살펴보겠습니다:

상태 분석
  1. 이 상태가 HFSM의 초기 상태임을 나타냅니다.
  2. 상태 이름
  3. 이 상태에서 나오는 전이 목록

새로운 상태 생성하기

새로운 상태를 생성하기 위해서, 에디터 창에서 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 Create New State를 선택합니다.

새로운 상태 생성
생성된 새로운 상태

상태 편집하기

상태를 편집하려면 대상 상태를 마우스 오른쪽 버튼으로 클릭하고 Edit This State을 선택합니다.

상태 편집

여기서 상태 이름을 정의하고 전환 삭제/재지정할 수 있습니다.

PS: 전환 순서를 변경해도 우선순위는 변경되지 않습니다. 시각적 조정에만 사용됩니다. 이 자습서에 대한 우선순위에 대해 자세히 설명되어 있습니다. 시각적 조정에만 사용됩니다.

변경 사항 저장하려면 엔터키를 누르거나 변경 사항을 무시하려면 Esc키를 누르세요.

상태 뷰 최소화하기

일반적으로 HFSM은 상태 및 전환의 측면에서 많은 양이 증가하므로 일부 HFSM의 흐름을 실제로 이해하기 어려울 수 있습니다. 모든 상태 노드에서 최소화 버튼을 클릭하여 전환 슬롯을 숨기고 해당 슬롯에서 선이 그려지는 방식을 변경하여 단순화된 뷰를 사용할 수 있습니다.

최소화된 상태 뷰

이전 그리고 이후를 분석해보겠습니다.

최대화된 샘플
최소화된 샘플

두 가지 상태간의 전환 생성하기

두 상태 간의 전환을 시작하려면 먼저 모든 상태의 왼쪽/오른쪽 모서리에 있는 작은 원 중 하나를 클릭합니다. 그런 다음 다른 상태를 클릭하면 이 두 상태를 연결하는 새 전환이 생성됩니다.

다른 상태를 클릭하는 대신 빈 공간을 클릭하면 대상 상태를 즉시 생성하려는 경우 에디터가 생성 패널이 나타납니다.

새로운 전환

새 전환을 생성할 때마다 어두운 색상이 나타나 전환이 아직 정의되지 않은것을 나타냅니다.

전환과 상호 작용하는 몇 가지 방법이 있습니다:

  1. 전환 중이면 마우스가 강조 표시됩니다.
  2. 전환을 왼쪽 클릭하면 전환 방향을 나타내는 작은 원이 전환 방향을 보여주게 됩니다.
  3. 전환을 두 번 클릭하면 해당 하위 그래픽에 들어가게 됩니다.
  4. 마우스 오른쪽 버튼 메뉴에서 전환 하위 그래픽에 들어가고, 전환을 뮤트 하거나 삭제할 수 있습니다.

결정 하위 그래프에 이미 생성된 노드를 분석해 보겠습니다:

전환 노드

이 노드가 전환을 실제로 정의하는 데 사용됩니다. 여기에는 네 가지 중요한 개념이 있습니다:

  1. 이 노드의 이름은 원시 상태와 대상 상태를 나타냅니다. 우클릭 메뉴를 사용하여 변경할 수 있으므로 의미 있는 이름으로 선택할 수 있으며, 위쪽에 표시되므로 어떤 상태인지 쉽게 파악할 수 있습니다.
  2. 첫 번째 슬롯은 이 전환을 평가할 때 고려해야 할 이벤트를 정의하는 데 사용됩니다.
  3. 두 번째 슬롯은 전환을 구성하는 Decision을 정의하는 데 사용됩니다.
  4. 세 번째 슬롯은 같은 노드에서 오는 모든 전환 간의 실행 순서를 정의하는 데 사용됩니다.

먼저 이 전환에 대한 간단한 결정을 정의해 보겠습니다. 이렇게 하려면 빈 공간을 마우스 오른쪽 단추로 클릭하면 패널에 만들 수 있는 가능한 결정이 표시됩니다.

초기 결정

간단하게 하기위해 TrueDecision을 선택합니다. 물론 이 결정의 결과는 언제나 사실입니다.

새로운 결정

이 결정의 결과가 어디로 향할지 정의하는 아웃바운드 슬롯이 있습니다.

따라서 Result 슬롯의 한쪽에 있는 원을 왼쪽 버튼으로 클릭하여 의사 결정 슬롯에 연결합니다:

연결된 결정

이게 다 입니다. 방금 가장 간단한 전환을 정의했습니다. 이를 통해 보트가 NewState에 있고 HFSM이 업데이트될 때마다 보트가 NewState1로 전송됩니다.

필드를 클릭하여 의사 결정 필드 값을 편집할 수 있습니다.

결정 필드들

변경 사항 저장하려면 엔터키를 누르거나 변경 사항을 무시하려면 Esc키를 누르세요.

이제 아주 간단한 전환이 정의되었으니, 다시 탑 뷰로 돌아가서 어떻게 생겼는지 살펴보겠습니다. 탑바의 이동경로에 있는 Root 버튼을 클릭하여 상태 뷰로 돌아갈 수 있습니다:

경로상의 루트

또는 왼쪽 패널을 사용하여 상태를 탐색할 수 있습니다:

계층구조 상위 루트

이제 그 전환이 더 이상 빨간색이 아니라는 것을 알 수 있습니다. 이는 올바른 전환임을 나타냅니다.

유효한 전환

전환 우선순위 정의하기

전환이 두 개 이상 있는 상태에서는 먼저 평가될 상태를 정의할 수 있습니다. 이 순서를 정의하려면 우선순위 슬롯을 사용합니다. 클릭하여 값을 설정합니다.

유효한 전환

상태 노드에서 전환의 우선순위를 보는것이 가능합니다.

유효한 전환

상위 우선순위 상위에서 낮은 우선순위 순으로 전환이 평가됩니다. 이 우선순위로 어떤 전환을 먼저 확인해야 할지를 정의할 수 있습니다.

노트: 한 상태의 전환에 대해 정의된 우선순위는 다른 상태의 전환과 아무런 차이가 없습니다.

새로운 전환 생성하기

우리는 현재 두 상태 사이에 단 한 번의 전환만이 있습니다. 이 기능을 사용하면 어떤 상태에서도 다중 전환이 없기 때문에 우선순위 필드가 무용지물이 됩니다.

새로운 전환을 생성하려면 상태 하단에 마우스를 놓으면 나타나는 (+) 버튼을 클릭합니다.

새로운 전환

그런 다음 첫 번째 전환과 마찬가지로 새로운 전환을 정의할 수 있습니다.

두개 전환

특별한 전환 유형

전환 집합

이러한 유형의 노드는 여러 전환을 그룹화하는 데 사용할 수 있습니다. 많은 상태에서 단일 전환 집합을 가리킬 수 있으므로 전환 집합을 재사용하는 것이 특히 유용합니다.

새 전환 집합을 만들려면 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 새 전환 집합 만들기를 선택합니다. 그러면 상태 노드와 매우 유사한 노드가 생성됩니다. 노드는 정의되지 않은 단일 전환으로 시작되며, 마우스를 아래쪽 부분에서 맴돌면 많은 새 전환을 생성할 수 있습니다:

전환 집합

그리고 나서, 링크를 생성합니다. 다음은 예제입니다:

최대화된 전환 집합

또한 상단 오른쪽 코너 버튼을 사용하여 전환 세트를 최소화할 수도 있습니다:

최소화된 전환 집합

모든 전환

이러한 전환은 같은 계층 레벨의 모든 상태에서 수행해야 하는 전환을 정의할 때 매우 유용합니다.

PS: 계층에 대해서는 이 문서에서 자세히 설명합니다.

오른쪽 클릭 메뉴에서 새 전환을 만듭니다.

이제 모든 전환의 대상 상태를 정의합니다.

모든 전환

위의 샘플 이미지에서 해당 계층 수준의 모든 상태는 모든 노드에서의 전환을 고려합니다.

어떤 상태에서도 전환이 무시되는 상태 목록을 정의할 수 있습니다. 제외 목록 메뉴에서 선택합니다.

목록에서 제외된 모든 전환

포털 전환

이 유형의 전환은 HFSM이 모든 레벨의 계층에서 다른 상태로 강제로 전환되도록 하기 위한 것입니다.

오른쪽 클릭 메뉴에서 새 포털 전환을 생성합니다.

포털 전환

이제 이 포털에서 HFSM을 사용할 상태를 정의해야 합니다. 드롭다운 메뉴를 클릭하여 선택합니다. 대상 상태의 이름은 사용자가 보유한 계층을 기반으로 합니다:

포털 드롭다운

포털의 대상을 정의한 후에는 해당 포털에서 고려할 상태를 정의하기만 하면 됩니다.

포털로 전환

복합 결정

단일 의사결정을 사용하여 전환을 정의하는 것 외에도 몇 가지로 구성된 결정을 작성할 수도 있습니다.
Bot SDK는 이미 3가지 논리적 결정을 통해 사용할 수 있습니다.

다음은 AND, OR 그리고 NOT 결정을 기반으로 구성된 결정 예제입니다.

복합 결정 1
복합 결정 2
복합 결정 3
복합 결정 4

이벤트

quantum_code 프로젝트에서 컴파일, 설정 등이 필요한 새 결정을 작성하지 않고 전환을 평가하려면 이벤트를 사용할 수 있습니다.

이벤트는 매우 간단한 방식으로 작동합니다. 이벤트가 트리거 될 때마다 현재 상태의 전환은 이벤트가 수신되고 있는지 확인합니다. 전환이 해당 이벤트를 수신할 경우 해당 이벤트가 수행됩니다. 코드 측면에서 이벤트를 트리거 하는 데 필요한 것은 다음과 같습니다:

아무 quantum_code 스크립트에서, 실행합니다:

C#

HFSMManager.TriggerEvent(f, &guy->Fields.HFSMAgent.Data, (Entity*)guy, "SomeEventName");

이 메서드 호출은 실행/결정 또는 시스템에서와 같은 다른 논리에 추가할 수 있습니다.

새로운 이벤트 생성을 하려면, 이벤트 세션의 좌측 패널에서 (+) 버튼을 클릭합니다:

이벤트 생성

그러면 새 이벤트를 생성하라고 표시됩니다. 이벤트를 두 번 클릭하여 이벤트 편집 또는 삭제를 열 수도 있습니다.

전환 하위 그래프에 이벤트를 배치하려면 이벤트를 끌어다 놓아야 합니다. 그런 다음 의사결정에 대해 수행한 작업과 유사하게 이벤트의 아웃바운드 슬롯을 전환 이벤트 인바운드 슬롯에 연결할 수 있습니다:

연결된 이벤트

노트: 결정 사항과 달리 복합 이벤트 정의는 없으며 전환 시 연결된 하나 이상의 이벤트를 수락하지 않습니다.

단 하나의 이벤트로 정의된 결정으로 전환되는 것은 유효한 전환으로 간주됩니다.

또한 이벤트와 의사 결정을 모두 설정하여 전환을 정의할 수도 있습니다. 이 경우 이 전환은 이벤트가 트리거되고 같은 프레임에서 의사 결정 조건 결과가 True인 경우에만 발생합니다.

이벤트와 결정

액션 정의하기

이제 상태 시스템 흐름(상태 및 전환 포함)을 생성하는 방법에 대해 논의했으므로 상태에 대한 동작을 정의하는 방법에 대해 살펴보겠습니다.

액션 정의하기 주제에서 더 많은 정보를 확인하실 수 있습니다.

뮤팅

AI를 테스트할 때 일부 노드를 음소거하여 일부 로직을 일시적으로 비활성화하는 것이 유용할 수 있습니다. 노드 음소거 방법에 대한 자세한 내용은 여기 뮤팅에서 확인하세요.

계층구조

모든 상태의 하위 그래프에서 새 상태 및 전환 집합을 생성할 수 있습니다. NewState 하위 그래프에서 AnotherState라는 새 상태를 생성한다고 가정해 보겠습니다. 이 작업을 수행하면 NewState가 부모이고 다른 상태는 자식이라는 두 작업 간에 관계가 생성됩니다.

부모 그리고 자식 상태의 작업 및 전환이 모두 실행됩니다. 이렇게 하면 다른 상태 머신의 내부에 상태 머신을 캡슐화할 수 있습니다.

예를 들어, 3가지 레벨로 행동을 하는 보스가 있다면 매우 유용할 수 있습니다: 쉬운 모드에서 시작하여 HP의 절반에 도달하면 조금 더 힘들어집니다. 그리고 전체 체력의 10%만 유지하면 더욱 어려워집니다. 상단 그래프에 3개의 주요 상태를 만들 수 있으며 각 상태에는 보스의 난이도를 정의할 수 있는 자체 상태 시스템이 있습니다.

HFSM을 구성하는 방법을 개선하는 데 매우 유용합니다.

하위 상태를 만들려면 아무 상태의 하위 그래픽으로 이동하여 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 새 상태 만들기 옵션을 선택합니다. 이렇게 하면 복잡한 계층 레벨을 가질 수 있으며, 이를 왼쪽 메뉴에서 시각화할 수 있습니다.

hfsm 계층구조

노트: 이러한 버튼들을 클릭하여 계층구조를 탐색할 수 있습니다. 또한 이러한 상태를 마우스 오른쪽 버튼으로 클릭하여 현재 그래프 뷰에서 새 포털을 생성할 수도 있습니다.

중요: 또한 HFSM의 모든 계층 수준(기본 상태)에 대해 정의할 수도 있습니다. 이것은 부모 상태 사이를 전환할 때 입력되는 자식 상태를 정의하는 것입니다. 기본 상태를 정의하려면 상태 노드를 마우스 오른쪽 버튼으로 클릭하고 "기본 상태 만들기"를 선택합니다.

HFSM 컴파일하기

생성한 HFSM을 실제로 사용하려면 수행한 작업을 컴파일해야 합니다.

컴파일하는 것에는 다음 두 가지 옵션이 있습니다:

컴파일 버튼
  • 왼쪽 버튼은 현재 열려 있는 문서만 컴파일하는 데 사용됩니다.
  • 오른쪽 버튼은 프로젝트에 있는 모든 AI 문서를 컴파일하는 데 사용됩니다.

HFSM 파일의 위치는 다음과 같습니다: "Assets/Resources/DB/CircuitExport/HFSM_Assets".

hfsm 에셋

봇에서 사용하도록 AI를 설정하기

마지막으로 생성된 AI를 사용하려면 컴파일된 에셋을 참조하기만 하면 됩니다. GUID를 기반으로 에셋을 로드하여 작업을 수행하거나 Asset Link를 생성하여 원하는 AI 에셋을 가리킬 수 있습니다:

ai 참조하기

HFSM 코딩

DSL의 관점에서 볼 때 새로운 HFSMAgents를 생성하는 두 가지 주요 옵션이 있습니다.

  • HFSMAgent를 필드 또는 엔티티의 구성 요소로 사용할 수 있습니다.
  • 엔티티를 가질 필요 없이 구조체나 글로벌 스페이스에서 선언할 수 있습니다.

게임 흐름 만들기, 게임 시작 시 수행되는 액션 정의, 게임의 현재 상태 변경 시기 정의 등과 같은 엔티티 범위를 벗어나는 작업을 HFSM이 수행하도록 할 수 있기 때문에 이 사실을 아는 것이 중요합니다.

에이전트 초기화

먼저 예를 들어, EntityPrototype을 사용하지 않는 경우 다음과 같이 새 HFS에이전트를 생성하여 엔티티에 추가합니다:

C#

var hfsmAgent = new HFSMAgent();
f.Set(myEntity, hfsmAgent);

그런 다음 애플리케이션에 더 적합한 경우 Visual Editor에서 컴파일한 HFSMRoot 에셋에 기반의 엔티티에 대한 HFSMManager.Init 메소드를 호출해야 합니다.

아래의 초기화 단계는 EntityPrototypes을 사용하는지 여부에 관계없이 완료되어야 합니다:

C#

var hfsmRootAsset = f.FindAsset<HFSMRoot>(referenceToRoot.Id);
HFSMManager.Init(frame, myEntity, hfsmRootAsset);

// Only do this if you are not using Entity Prototypes
f.Set(myEntity, hfsmAgent);

HFSM 초기화 프로세스에 필요한 정보가 HFSM 에이전트 자체에 포함되어 있는 경우, 필요한 모든 데이터를 얻기 위해 엔티티에서 컴포넌트를 가져올 수 있습니다:

Unknown

var hfsmAgent = f.Get<HFSMAgent>(myEntity);

"OnComponentAdded" 콜백을 사용한 초기화

또한 EntityPrototype에서 HFSMRoot 에셋에 대한 참조를 직접 설정하고 OnComponentAdded 시그널을 사용하여 해당 정보로 에이전트를 초기화할 수 있습니다:

C#

// At any system...
  public unsafe class AISystem : SystemMainThread, ISignalOnComponentAdded<HFSMAgent>
  {
    public void OnAdded(Frame f, EntityRef entity, HFSMAgent* component)
    {
      // This is how you get the HFSMRoot from the component set on the Entity Prototype
      HFSMRoot hfsmRoot = f.FindAsset<HFSMRoot>(component->Data.Root.Id);
      
      // Then we just do the initialization step
      HFSMManager.Init(f, entity, hfsmRoot);
    }
  
  // ...
  }

에이전트 업데이트

이제 엔티티의 HFSMAgent가 초기화되었으므로, 필요할 때 Update 메소드를 호출하기만 하면 됩니다:

C#

HFSMManager.Update(f, f.DeltaTime, myEntity);

이렇게 하면 HFSM은 초기 상태의 데이터를 실행하고 다른 상태로 액션 및 전환을 수행합니다. 이를 통해 AI는 이미 Visual Editor에서 생성한 흐름을 실행해야 합니다.

에이전트를 초기화하고 업데이트하는 샘플 시스템

C#

namespace Quantum
{
  public unsafe class AISystem : SystemMainThread, ISignalOnComponentAdded<HFSMAgent>
  {
    public void OnAdded(Frame f, EntityRef entity, HFSMAgent* component)
    {
      HFSMRoot hfsmRoot = f.FindAsset<HFSMRoot>(component->Data.Root.Id);
      HFSMManager.Init(f, entity, hfsmRoot);
    }

    public override void Update(Frame f)
    {
      var allAgents = f.Filter<HFSMAgent>();
      while(allAgents.NextUnsafe(out var entity, out var agent))
      {
        HFSMManager.Update(f, f.DeltaTime, entity);
      }
    }
  }
}

액션과 결정 코딩하기

나만의 액션을 생성하기 위해서, 다음 지침을 따라하세요: 코딩 액션

나만의 결정 생성은 매우 유사합니다.
하지만 AIAction에서 상속된 새로운 클래스를 생성하는 것 보다, HFSMDecision 추상 클래스로부터 상속을 받습니다.

또한 Update 메소드를 구현할 필요가 없는 대신 Decide 메소드를 구현해야 합니다. 필요에 따라 true/false를 리턴할 때 사용합니다.

중요: [Serializable]partial로 새로운 클래스를 표기해야 합니다.

C#

namespace Quantum
{
  [Serializable]
  public partial class TrueDecision : HFSMDecision
  {
    public override unsafe bool Decide(Frame frame, EntityRef entity)
    {
      return true;
    }
  }
}

필드값 정의하기

액션/결정 필드에 값을 설정할 때 사용할 수 있는 대안에 대한 자세한 내용은 여기에서 확인하십시오: 필드값 정의하기

AIParam

AIParam 사용에 대한 자세한 내용은 여기에서 확인할 수 있습니다. AIParam은 직접 설정하거나 Blackboard/Constant/Config 노드에서 설정할 수 있는 보다 유연한 필드를 사용하는 데 유용합니다:AIParam.

AIContext

에이전트 상황별 정보를 파라미터로 전달하는 방법에 대한 자세한 내용은 여기에서 확인하십시오: AIContext.

BotSDKSystem

Blackboard 메모리 할당 해제와 같은 일부 프로세스를 자동화하는 데 사용되는 클래스가 있습니다. 자세한 내용은 여기를 참조하세요: BotSDKSystem.

디버거

Bot SDK에는 자체 디버깅 도구가 함께 제공됩니다. 그러면 개발자가 런타임에서 모든 HFSM 에이전트를 클릭하고 비주얼 에디터에 강조 표시된 최신 에이전트 흐름을 볼 수 있습니다. 다음은 Bot SDK 샘플 프로젝트에서 작업하는 디버깅 도구의 샘플입니다.

debugger graph

위 그림에서 볼 수 있듯이, 에이전트의 현재 상태는 무엇이며, 이러한 상태로 이어졌던 가장 최근의 세 가지 전환은 어떤 것인지 알 수 있습니다.

또한 계층 뷰에서 현재 상태를 검사할 수도 있습니다. 화살표가 있는 상태는 HFSM이 현재 해당 상태에 있음을 나타냅니다. 이 기능은 현재 에이전트가 계층에 얼마나 깊이 있는지 확인하기 위해 시각적 그래프를 탐색할 필요가 없으므로 유용합니다.

디버거 계층구조

디버거 사용하기

다음은 프로젝트에서 디버거를 사용하기 위한 절차입니다.

  1. SystemSetup.cs 파일에서 BotSDKDebuggerSystem을 활성화합니다. 이 특정 시스템을 사용하는 것은 선택 사항입니다. 디버깅 로직을 다른 곳에 두는 것을 더 선호한다면, 검증된 프레임의 커스텀 시스템내에서 BotSDKDebuggerSystem.OnVerifiedFrame?.Invoke(f); 만 호출하면 됩니다.
  2. 비쥬얼 편집기에서, 상단 패널에 있는 버그 아이콘을 클릭합니다. 아이콘이 초록색인 경우 디버깅이 활성화 상태입니다
디버그 활성화

이제 디버깅할 엔티티를 선택하는 두 가지 방법이 있습니다. 선택한 게임 객체와 관련이 있거나, 인스펙터 창에서 선택할 수 있습니다. 위의 항목 중 하나를 선택할 수 있습니다. 또는 둘 다:

Game Object로 부터 디버깅

  1. HFSMAgent 를 컴포넌트로 하는 Quantum 엔티티를 나타내는 프리팹/엔티티 프로토타입을 선택합니다

  2. 여기에 BotSDKDebugger를 추가합니다

  3. 실행 중에 Bot SDK 창을 열고 Bot SDK 디버거가 추가된 게임 객체를 선택합니다. 좋아요! 디버깅이 이미 작동하고 있어야 합니다

디버거 인스펙터 윈도우에서 디버깅하기:

  1. 시뮬레이션에서는 에이전트 엔티티를 디버거 창에 등록해야 합니다. 다음을 호출하여 수행할 수 있습니다:

    BotSDKDebuggerSystem.AddToDebugger(entitiRef, (optional) customLabel)

    디버깅된 엔티티에 대해 표시되는 기본 이름은 Entity XX | AIAssetName 패턴을 따릅니다. 그러나 디버그 항목에 사용자 정의 이름을 지정하려면 customLabel 파라미터를 사용할 수 있습니다. 원하는 대로 될 수 있습니다.

    계층을 작성할 수도 있습니다. 사용자 지정 레이블에서 구분 기호 /를 사용하기만 하면 디버거 창에 계층 구조를 만들 수 있으며, 이 계층 구조는 접거나 확장할 수 있습니다;

  2. 유니티에서 디버거 활성화 버튼의 오른쪽에 있는 버튼을 클릭합니다. 등록된 모든 엔티티를 표시하는 새 창이 열립니다. 디버깅할 항목을 선택하면 끝입니다.

debug window
debug hierarchy

예를 들어 위의 샘플 gif에 사용된 일부 사용자 지정 레이블은 Monster 1, Monster 2, Blue Team/Commander, Blue Team/Warriors/Foo, Blue Team/Warriors/Fuz and Blue Team/Wizards/Bar입니다

중요: 디버거가 활성화되면 디버거는 디버깅에 필요한 데이터를 저장하기 위해 메모리를 할당할 것이며, 이는 편집기에서 게임을 하는 경우 속도가 느려질 수 있습니다. 따라서 유니티 내에서 애플리케이션을 프로파일링하는 경우 프로파일링의 일부가 디버거와 관련이 있을 수 있으므로 프로파일링 중에 비활성화하는 것이 좋습니다.

PS: 디버거 창에는 엔티티 뷰가 없는 엔티티도 표시됩니다. 이렇게 하면 HFSM을 디버그할 수 있습니다

PS2: 현재 DSL 글로벌에 있는 에이전트와 같이 엔티티에 연결되지 않은 에이전트를 디버그할 수 없습니다. 이는 이후 버전에만 추가됩니다.

비주얼 에디터 주석

비주얼 에디터에서 주석 작성법은 다음을 참고하세요: Visual Editor 주석.

컴파일 내보내기 폴더 변경하기

기본적으로 Bot SDK의 컴파일로 생성된 에셋은 Assets/Resources/DB/CircuitExport 폴더에 저장됩니다. 내보내기 폴더를 변경하는 방법은 다음을 참조하십시오: 내보내기 폴더 변경하기.

저장된 기록 크기 선택

Bot SDK 파일에 저장된 기록 항목의 양을 변경할 수 있습니다. 이 주제에 대한 자세한 내용은 여기를 참조하십시오: 기록 저장 건수 변경하기.

프레임내에서 발생하는 것

Bot SDK에서, 주 진입점들은 다음과 같습니다:

  • HFSMManager.Update, 에이전트를 업데이트하기 위해 지속적으로 호출됩니다.
  • HFSMManager.Init, 에이전트 초기화에 사용됩니다.
  • HFSMManager.TriggerEvent, 트리거된 이벤트를 고려하여 강제로 전환 검사를 수행합니다.

이러한 메서드가 호출될 때 프레임에서 발생하는 작업을 더 잘 시각화할 수 있도록 다음과 같은 흐름 그래프가 있습니다:

commented actions
Back to top