언어:
페이지 정보
엔진 버전:
언리얼 엔진

14. 비헤이비어 트리 제작

언리얼 엔진

이제 비헤이비어 트리를 제작하는 데 필요한 모든 조각이 갖춰졌을 것입니다:

DoneBehaviorTree.jpg

뭐가 어떻게 돌아가는지 분석해 봅시다.

  • AI 가 AI 캐릭터 아닌 폰을 감지하지 못한 경우, 그냥 서있습니다.

  • AgroCheck Service 가 계속해서 적당한 타깃을 찾습니다.

  • 찾으면 가장 왼쪽의 분기가 열려, AI 는 타깃 폰을 향해 뛰어갑니다.

  • 그 폰 범위 안에 들어서면, 분기 실행이 중지되어 그래프 상단으로 돌아갑니다.

  • 바라던 폰이 숨으면, 가장 오른쪽 분기를 실행할 수 있게 되고, 이를 통해 AI 가 바라던 폰의 마지막 알려진 위치로 이동하게 됩니다.

  • 거기 도착하면 기다렸다가 원래 위치로 돌아갑니다.

  • 언제든 적당한 타깃을 찾으면 가장 오른쪽 분기 실행이 강제 중지되어, 가장 왼쪽 분기가 열립니다.

이 트리 생성 과정을 단계별로 살펴봅시다.

단계

기본 셋업

이 가이드 8 단계에서 이 작업을 이미 했을 수 있지만, 그 변경사항을 저장하지 않았을 수도 있으니, 비헤이비어 트리 기본 구조를 만드는 법은 이렇습니다:

  1. 비헤이비어 트리가 편집용으로 열려있지 않은 경우, 콘텐츠 브라우저 에서 더블클릭 하여 편집용으로 엽니다.

  2. 비헤이비어 트리 모드로 전환합니다.

    btMode.png

  3. 비헤이비어 트리를 처음 편집하면, 루트 노드만 있을 것입니다:

    root.png

  4. 그래프 에디터에 우클릭 하여 노드를 생성할 수 있습니다.

    1. Composites -> Sequence 노드를 추가합니다.

      sequence.jpg

    2. Composites -> Selector 노드를 두 개 추가합니다.

      selector.jpg

  5. 루트 노드와 Selector 노드 중 하나를 연결합니다.

    connectNodes.jpg

  6. 새로 연결된 Sequence 노드를 Selector 노드와 나머지 Sequence 노드에 연결합니다. 그런 다음 이렇게 배치합니다:

    connectNodes2.jpg

    왼쪽에 두 번째 Selector 노드, 오른쪽에 Sequence 노드입니다.

서비스 추가

  1. Selector 노드 위에 우클릭 컨텍스트 메뉴에서 서비스 추가 -> Agro Check 노드를 추가합니다.

    addAgro.png

  2. Selector 노드에서 Agro Check 박스를 선택한 다음 디테일 패널을 사용해서 Target to Follow 프로퍼티를 TargetToFollow 로, Target LocationTargetLocation 으로 설정하고, Interval0.5 로, Random Deviation0.0 으로 조정합니다.

    setAgroCheck1.jpg

태스크 추가

  1. 그래프 영역에 우클릭 하여 컨텍스트 메뉴를 띄운 다음, 태스크를 네 개 추가합니다: Rapid Move To 노드 하나, Wait 노드 하나, Move To 노드 두 개 입니다:

    addTaskNodes.png

  2. 아래쪽 Selector 노드를 Rapid Move To 노드에 연결합니다.

  3. Sequence 노드를 Move To 노드와 Wait 노드에 연결합니다.

  4. 노드를 이렇게 배치합니다:

    connectedTasks.png

    왼쪽에서 오른쪽으로: Rapid Move To, Move To, Wait, Move To 입니다.

  5. 가장 왼쪽의 Move To 노드를 선택한 다음 디테일 패널을 사용하여 Blackboard Key 프로퍼티를 TargetLocation 으로 설정합니다.

  6. 가장 오른쪽의 Move To 노드의 Blackboard Key 프로퍼티를 HomeLocation 로 설정합니다.

    adjustMoveTo.jpg

  7. Wait 노드를 선택한 다음 디테일 패널을 사용하여 Wait Time 프로퍼티를 2.5 로 설정합니다.

    adjustWait.jpg

  8. RapidMoveTo 노드를 선택하고 디테일 패널을 사용하여 Target to Follow 프로퍼티를 TargetToFollow 로 설정합니다.

데코레이터 추가

  1. 아래쪽 Selector 노드에 우클릭 한 다음 데코레이터 추가.. -> Blackboard 를 선택합니다.

  2. 아래쪽 Selector 노드에 우클릭 한 다음 데코레이터 추가.. -> Close Enough 를 선택합니다.

    addDecorator1.jpg

  3. Blackboard 데코레이터의 Observer Aborts 프로퍼티를 Both 로, Key QueryIs Set 으로, Blackboard KeyTargetToFollow 로 설정합니다.

  4. Close Enough 데코레이터의 Acceptable Distance 프로퍼티를 100.0 으로, Target to Follow 프로퍼티를 TargetToFollow 로 설정합니다.

    setBB1.jpg

  5. Sequence 노드에 우클릭 한 다음 데코레이터 추가.. -> Blackboard 를 선택합니다.

  6. Sequence 노드에 우클릭 한 다음 데코레이터 추가.. -> Is At Location 을 선택합니다.

  7. Sequence 노드에 우클릭 한 다음 데코레이터 추가.. -> Blackboard 를 선택합니다.

    데코레이터를 전부 추가한 이후의 전체 노드 블록은 이런 모습입니다:

    addToSeqNode.png

  8. 첫 번째 Blackboard 데코레이터에서, Key QueryIs Not Set 로, Blackboard KeyTargetToFollow 로 설정합니다.

  9. 두 번째 Blackboard 데코레이터에서, Key QueryIs Set 으로, Blackboard KeyTargetLocation 로 설정합니다.

  10. Reached Move Goal 데코레이터에서, Inverse Condition 프로퍼티를 켜고 Blackboard KeyHomeLocation 으로 설정합니다.

    이렇게 프로퍼티를 설정한 이후 전체 노드 블록 모습은 이렇습니다:

    propsSet.png

다 됐습니다! 비헤이비어 트리 에디터를 열어둔 채 에디터에서 플레이 하면 트리가 어떻게 돌아가는지 확인할 수 있을 것입니다. AI 에 충분히 가까이 가서 우리를 볼 수 있게 되면, 우리를 쫓아오기 시작합니다. 시선을 막을 수 있다면, 마지막 알던 위치로 돌아가 기다린 다음 시작했던 곳으로 되돌아갑니다.