스마트 오브젝트 퀵스타트

AI 에이전트로 스마트 오브젝트를 만들고 사용하는 방법을 설명합니다.

Choose your operating system:

Windows

macOS

Linux

개요

스마트 오브젝트(Smart Objects) 는 레벨 내 배치되는 오브젝트로, AI 에이전트와 플레이어가 상호작용할 수 있습니다. 스마트 오브젝트는 상호작용에 필요한 모든 정보를 포함합니다.

크게 보면 스마트 오브젝트는 예약 시스템을 통해 사용할 수 있는 레벨 내 활동 세트를 나타냅니다. 이 시스템은 레벨 내 모든 스마트 오브젝트를 트래킹하며, AI 에이전트가 스마트 오브젝트를 ‘예약'하여 다시 사용 가능한 상태가 되기 전까지 다른 에이전트는 스마트 오브젝트를 사용할 수 없게 합니다.

목표

이 퀵스타트 가이드에서는 AI 에이전트를 사용해 스마트 오브젝트를 만들고 사용하는 방법을 설명합니다.

세부 목표

  • AI 에이전트가 스마트 오브젝트에 도달할 때 사용할 수 있는 AI 게임플레이 비헤이비어 및 비헤이비어 정의를 만듭니다.

  • 비헤이비어 정의를 사용해 애니메이션 몽타주를 플레이하는 스마트 오브젝트를 만듭니다.

  • 비헤이비어 트리와 비헤이비어 트리 태스크가 있는 간단한 AI 비헤이비어를 만듭니다.

  • 레벨 내 스마트 오브젝트를 찾아서 사용할 수 있는 AI 에이전트를 만듭니다.

1 - 필수 구성

  1. 3인칭(Third Person) 템플릿을 바탕으로 새 블루프린트(Blueprint) 프로젝트를 만듭니다.

  2. 메인 메뉴에서 세팅(Settings) > 플러그인(Plugins) 으로 이동한 다음 플러그인(Plugins) 창을 엽니다.

    플러그인 창 열기

  1. 게임플레이(Gameplay) 섹션에서 스마트 오브젝트(Smart Objects)AI 비헤이비어(AI Behaviors) 플러그인을 활성화합니다. 재시작하라는 메시지가 뜨면 에디터를 재시작합니다.

    스마트 오브젝트 플러그인 활성화

    AI 비헤이비어 플러그인 활성화

섹션 결과

이 섹션에서는 새 프로젝트를 만들고 스마트 오브젝트 및 AI 비헤이비어 플러그인을 활성화했습니다. 이제 AI 에이전트를 위한 AI 게임플레이 비헤이비어를 만들 차례입니다.

2 - AI 게임플레이 비헤이비어 만들기

이 섹션에서는 에이전트가 스마트 오브젝트 슬롯에 도달했을 때 할 행동을 정의하는 게임플레이 비헤이비어와 게임플레이 구성 블루프린트를 만듭니다.

  1. 콘텐츠 브라우저(Content Browser) 에서 우클릭한 다음 기본 에셋 생성(Create Basic Asset) 섹션에서 블루프린트 클래스(Blueprint Class) 를 선택합니다.

    새 블루프린트 클래스 생성

  1. 부모 클래스 선택(Pick Parent Class) 창에서 모든 클래스(All Classes) 섹션을 펼친 다음, 게임플레이 비헤이비어(Gameplay Behavior) 를 검색하여 선택합니다. 선택(Select) 을 클릭하고, 새 에셋의 이름을 BP_SO_Behavior_PlayMontage 로 지정합니다.

    게임플레이 비헤이비어 클래스 선택

  2. 새 블루프린트 클래스를 생성한 다음 게임플레이 비헤이비어 구성(Gameplay Behavior Config) 을 검색하여 선택합니다. 선택(Select) 을 클릭하고, 새 에셋의 이름을 BP_SO_BehaviorConfig 로 지정합니다.

    게임플레이 비헤이비어 구성 클래스 선택

  3. 콘텐츠 브라우저(Content Browser) 에서 BP_SO_BehaviorConfig 를 더블 클릭하여 엽니다. 디테일(Details) 패널로 이동한 다음 비헤이비어 클래스(Behavior Class) 드롭다운을 클릭합니다. BP_SO_Behavior_PlayMontage 를 선택합니다. 블루프린트를 컴파일하고 저장합니다.

    비헤이비어 클래스에 BP_SO_Behavior_PlayMontage 추가

  4. 콘텐츠 브라우저(Content Browser) 에서 BP_SO_Behavior_PlayMontage 를 더블 클릭하여 엽니다. 함수(Functions) 옆에 있는 오버라이드(Override) 드롭다운을 클릭한 뒤 OnTriggeredCharacter 를 선택합니다.

    OnTriggeredCharacter 함수 오버라이드

  5. Event OnTriggeredCharacter 노드의 Avatar 핀을 우클릭한 뒤 변수로 승격(Promote to Variable) 을 선택합니다.

    Event OnTriggeredCharacter 노드의 Avatar 핀 우클릭 후 변수로 승격 선택

  6. Avatar 변수를 이벤트 그래프(Event Graph) 로 드래그한 뒤 Get Avatar 를 선택합니다. Avatar 노드에서 드래그한 다음 Get Component by Class 를 검색해 선택합니다.

    Get Component by Class 검색해 선택

  7. 컴포넌트 클래스(Component Class) 드롭다운을 클릭한 뒤 스켈레탈 메시 컴포넌트(Skeletal Mesh Component) 를 검색하여 선택합니다.

    스켈레탈 메시 컴포넌트 추가

  8. 이벤트 그래프(Event Graph) 에서 우클릭한 뒤 Play Montage 를 검색하여 선택합니다.

    1. Get Component by Class 노드의 Return Value 핀을 Play Montage 노드의 In Skeletal Mesh Component 핀에 연결합니다.

    2. Set Avatar 노드를 Play Montage 노드에 연결합니다.

    Play Montage 노드 추가

    Play Montage 노드를 Set Avatar 노드에 연결

  9. Play Montage 노드에서 Montage to Play 드롭다운을 클릭합니다. 목록에서 애니메이션 몽타주를 선택합니다.

    플레이할 애니메이션 몽타주 선택

    사용 가능한 애니메이션이 없다면 언리얼 엔진 마켓플레이스에서 애니메이션 스타터 팩(Animation Starter pack)과 같은 무료 애니메이션 에셋 팩을 다운로드하면 됩니다.

  1. Avatar 변수를 이벤트 그래프(Event Graph) 로 드래그한 뒤 Get Avatar 를 선택합니다. Avatar 노드에서 드래그한 다음 End Behavior 를 검색해 선택합니다.

    End Behavior 노드 추가

  2. Play Montage 노드의 On CompletedOn Interrupted 핀을 End Behavior 노드와 연결합니다.

    On Completed 및 On Interrupted를 End Behavior 노드에 연결

  3. 블루프린트를 컴파일하고 저장합니다.

    이 예시에서는 Play Anim Montage 노드가 아닌 Play Montage 노드를 사용하기 때문에 행동을 끝낼 때 On CompletedOn Interrupted 핀을 사용합니다. 이렇게 하면 애니메이션의 재생이 끝날 때까지 스마트 오브젝트가 차지된 상태를 유지합니다.

섹션 결과

이 섹션에서는 에이전트가 스마트 오브젝트 슬롯에 도달했을 때 애니메이션 몽타주를 플레이하는 데 사용할 게임플레이 비헤이비어와 게임플레이 구성 블루프린트를 만들었습니다. 이제 스마트 오브젝트가 사용할 비헤이비어 정의를 만들 차례입니다.

3 - 스마트 오브젝트 정의 데이터 에셋 만들기

이 섹션에서는 각 스마트 오브젝트 슬롯의 행동을 정의할 스마트 오브젝트 정의 데이터 에셋(Smart Object Definition Data Asset)을 만듭니다.

  1. 콘텐츠 브라우저(Content Browser) 에서 우클릭하고 기타(Miscellaneous) > 데이터 에셋(Data Asset) 을 선택합니다.

    1. 데이터 에셋 인스턴스 클래스 선택(Pick Class for Data Asset Instance) 창에서 스마트 오브젝트 정의(Smart Object Definition) 를 검색해 선택합니다.

    2. 선택(Select) 을 클릭해 에셋을 만들고 이름을 SO_Definition_PlayMontage 로 지정합니다.

    기타 - 데이터 에셋 선택

    스마트 오브젝트 정의 선택

  2. 콘텐츠 브라우저(Content Browser) 에서 SO_Definition_PlayMontage 를 더블 클릭해 엽니다. 스크롤을 내려 스마트 오브젝트(Smart Object) 섹션으로 이동한 다음 슬롯(Slots) 옆에 있는 추가 (+)(Add (+)) 버튼을 눌러 새 슬롯을 만듭니다. 행동을 수행할 때 AI 에이전트가 사용하게 될 슬롯입니다.

    슬롯 옆의 추가 (+)(Add (+)) 버튼을 클릭해** ** 새 슬롯 추가

  3. 디폴트 비헤이비어 정의(Default Behavior Definitions) 옆의 추가 (+)(Add (+)) 버튼을 클릭한 다음, Index 0 에서 스마트 오브젝트 비헤이비어 정의(Smart Object Gameplay Behavior Definition) 를 선택합니다. 게임플레이 비헤이비어 구성(Gameplay Behavior Config) 드롭다운을 클릭하고 BP_SO_BehaviorConfig 를 선택합니다.

    새 디폴트 비헤이비어 정의 추가

  4. 블루프린트를 저장한 후 닫습니다.

섹션 결과

이 섹션에서는 스마트 오브젝트의 각 슬롯을 정의하는 스마트 오브젝트 정의 데이터 에셋과 디폴트 비헤이비어 정의를 만들었습니다.

4 - 스마트 오브젝트 만들기

이 섹션에서는 레벨에서 에이전트가 찾아서 사용할 수 있는 스마트 오브젝트를 만듭니다.

  1. 콘텐츠 브라우저(Content Browser) 에서 우클릭한 다음 기본 에셋 생성(Create Basic Asset) 섹션에서 블루프린트 클래스(Blueprint Class) 를 선택합니다.

    새 블루프린트 클래스 생성

  2. 부모 클래스 선택(Pick Parent Class) 창에서 액터(Actor) 클래스 버튼을 클릭해 에셋을 생성합니다. 새 에셋 이름을 BP_SO_RunBT 로 지정합니다.

    액터 클래스 선택

  3. 콘텐츠 브라우저(Content Browser) 에서 BP_SO_RunBT 를 더블 클릭해 엽니다. 컴포넌트(Components) 창에서 + 추가(Add) 버튼을 클릭합니다. 스마트 오브젝트(Smart Object) 를 검색해 선택합니다.

    스마트 오브젝트 컴포넌트 선택

  4. 스마트 오브젝트(SmartObject) 컴포넌트를 선택한 상태로 디테일(Details) 패널로 이동한 뒤 스마트 오브젝트(Smart Object) 섹션으로 스크롤을 내립니다. 정의 에셋(Definition Asset) 드롭다운을 클릭하고 SO_Definition_PlayMontage 를 선택합니다.

    정의 에셋 추가

  5. 블루프린트를 컴파일하고 저장합니다.

섹션 결과

이 섹션에서는 스마트 오브젝트를 만들고 슬롯의 디폴트 비헤이비어를 정의하는 비헤이비어 정의를 추가했습니다.

5 - AI 에이전트의 비헤이비어 트리 만들기

이 섹션에서는 AI 에이전트가 레벨에서 스마트 오브젝트를 찾아서 사용하는 데 필요한 비헤이비어를 만듭니다. 단순한 비헤이비어 트리 1개와 커스텀 비헤이비어 트리 태스크 2개를 사용합니다.

비헤이비어 트리와 블랙보드 만들기

  1. 콘텐츠 브라우저(Content Browser) 에서 우클릭하고 AI > 블랙보드(Blackboard) 를 선택합니다. 블랙보드의 이름을 BB_SO_Agent 로 지정합니다.

    블랙보드 생성

  2. BB_SO_Agent 를 더블 클릭해 엽니다. 새 키(New Key) 드롭다운을 클릭한 뒤 스마트 오브젝트 클레임 핸들(SmartObject Claim Handle) 을 선택합니다. 키 이름을 ClaimHandle 로 지정합니다. 블랙보드를 저장한 후 닫습니다.

    스마트 오브젝트 클레임 핸들 추가

  3. 콘텐츠 브라우저(Content Browser) 에서 우클릭하고 AI > 비헤이비어 트리(AI > Behavior Tree) 를 선택합니다. 비헤이비어 트리의 이름을 BT_SO_Agent 로 지정합니다.

    비헤이비어 트리 만들기

비헤이비어 트리 태스크 만들기

스마트 오브젝트 찾기(Finding Smart Objects)

  1. 콘텐츠 브라우저(Content Browser) 에서 우클릭한 다음 기본 에셋 생성(Create Basic Asset) 섹션에서 블루프린트 클래스(Blueprint Class) 를 선택합니다.

    새 블루프린트 클래스 생성

  2. 모든 클래스(All Classes) 섹션에서 BT 태스크 블루프린트 베이스(BT Task Blueprint Base) 를 검색해 선택한 뒤 선택(Select) 을 클릭합니다. 블루프린트 이름을 BTT_FindSmartObject 로 지정합니다.

    BT 태스크 블루프린트 베이스를 검색해 선택한 뒤 선택 클릭

  3. 콘텐츠 브라우저(Content Browser) 에서 BTT_FindSmartObject 를 우클릭한 뒤 복제(Duplicate) 를 선택합니다. 새 블루프린트 이름을 BTT_UseSmartObject 로 지정합니다.

    BTT_FindSmartObject 복제

  4. 콘텐츠 브라우저(Content Browser) 에서 BTT_FindSmartObject 를 더블 클릭해 엽니다. 이벤트 그래프(Event Graph) 에서 우클릭한 뒤 Event Receive Execute AI 를 검색해 선택합니다.

    Event Receive Execute AI 노드 추가

  5. Event Receive Execute AI 노드의 Owner Controller 핀에서 드래그한 뒤 Get Blackboard 를 검색해 선택합니다.

    1. Get Blackboard 노드의 Return Value 핀을 우클릭한 뒤 변수로 승격(Promote to Variable) 을 선택합니다. 변수의 이름을 Blackboard 로 지정합니다.

    2. Event Receive Execute AI 노드를 Set Blackboard 노드에 연결합니다.

    Get Blackboard 노드 추가

    Set Blackboard 노드를 Event Receive Execute AI 노드에 연결

  6. Event Receive Execute AI 노드의 Controller Pawn 핀에서 드래그한 뒤 Get Actor Location 을 검색해 선택합니다.

    1. Get Actor Location 노드의 Return Value 핀에서 드래그한 뒤 Subtract 를 검색해 선택합니다.

    2. Get Actor Location 노드의 Return Value 핀에서 드래그한 뒤 Add 를 검색해 선택합니다.

    3. 두 노드의 X , Y , Z 값을 2000 으로 설정합니다. 이렇게 하면 에이전트 주위로 4000 x 4000 유닛, 즉 40 x 40 미터의 검색 박스가 만들어집니다.

    Get Actor Location 노드 추가

    Subtract 및 Add 노드 추가

  7. 이벤트 그래프(Event Graph) 에서 우클릭한 뒤 Make Box 를 검색해 선택합니다.

    1. Subtract 노드를 Make Box 노드의 Min 핀에 연결합니다.

    2. Add 노드를 Make Box 노드의 Max 핀에 연결합니다.

    Make Box 노드 추가

    Make Box 노드 연결

  8. 이벤트 그래프(Event Graph) 에서 우클릭한 뒤 Get Smart Object Subsystem 을 검색해 선택합니다.

    1. Smart Object Subsystem 노드에서 드래그한 뒤 Find Smart Objects 를 검색해 선택합니다.

    2. Find Smart Objects 노드의 Request 핀에서 드래그해 Make SmartObjectRequest 를 선택합니다.

    Get Smart Object Subsystem 노드 추가

    Find Smart Objects 노드 추가

    Make SmartObjectRequest 선택

  9. Make Box 노드의 Return Value 핀을 Make SmartObjectRequest 노드의 Query Box 핀에 연결합니다.

    1. Make SmartObjectRequest 노드의 Filter 핀에서 드래그해 Make SmartObjectRequestFilter 를 선택합니다.

    2. Make SmartObjectRequestFilter 노드에서 Behavior Definition Class 드롭다운을 클릭하고 SmartObjectGameplayBehaviorDefinition 을 선택합니다.

    3. Set Blackboard 노드를 Find Smart Objects 노드에 연결합니다.

    Make Box 노드의 Return Value 핀을 Make SmartObjectRequest 노드의 Query Box 핀에 연결

    드롭다운에서 SmartObjectGameplayBehaviorDefinition 선택

  10. 지금까지 만든 블루프린트는 이런 모습입니다.

    지금까지 만든 블루프린트

  11. Find Smart Objects 노드의 Out Results 핀을 우클릭한 뒤 변수로 승격(Promote to Variable) 을 선택합니다.

    1. Out Results 노드의 핀에서 드래그한 뒤 Is Valid Index 를 검색해 선택합니다.

    2. Is Valid Index 노드에서 드래그한 뒤 Branch 를 검색해 선택합니다. Out Results 노드를 Branch 노드와 연결합니다.

    Find Smart Objects 노드의 Out Results 핀 우클릭 후 변수로 승격 선택

    Is Valid Index 선택

    Is Valid Index 선택

  12. Branch 노드의 False 핀에서 드래그한 뒤 Finish Execute 를 검색해 선택합니다. 근처에 검색 기준을 만족하는 스마트 오브젝트가 없으면 Out Results 는 무효가 됩니다.

    Branch 노드의 False 핀에서 드래그한 뒤 Finish Execute를 검색해 선택

  13. 이벤트 그래프(Event Graph) 에서 Smart Object Subsystem 노드를 만듭니다. 노드에서 드래그한 뒤 Claim 을 검색해 선택합니다.

    1. Branch 노드의 True 핀을 Claim 노드에 연결합니다.

    2. Out Results 변수를 이벤트 그래프(Event Graph) 로 드래그해 가져온 다음 Get Out Results 를 선택합니다. 이 노드에서 드래그한 뒤 Random Array Item 을 검색해 선택합니다.

    3. Random 노드에서 드래그한 뒤 Claim 노드의 Request Results 핀에 연결합니다.

    Claim 노드 추가

    노드에서 드래그한 뒤 Random Array Item을 검색해 선택

    Random 노드에서 드래그한 뒤 Claim 노드의 Request Results 핀에 연결

  14. Claim 노드의 Return Value 핀을 우클릭한 뒤 변수로 승격(Promote to Variable) 을 선택합니다. 변수의 이름을 ClaimHandle 로 지정합니다.

    1. Claim Handle 노드 핀에서 드래그한 뒤 Is Valid Smart Object Claim Handle 을 검색해 선택합니다.

    2. *Is Valid Smart Object Claim Handle** 노드의 **Return Value** 핀에서 드래그한 뒤 **Branch** 를 검색해 선택합니다.

    Claim 노드의 Return Value 핀을 우클릭한 뒤 변수로 승격 선택. ClaimHandle로 변수 이름 지정

    Claim Handle 노드 핀에서 드래그한 뒤 Is Valid Smart Object Claim Handle을 검색해 선택

    Is Valid Smart Object Claim Handle 노드의 Return Value 핀에서 드래그한 뒤 Branch를 검색해 선택

  15. Branch 노드의 False 핀에서 드래그한 뒤 Finish Execute 를 검색해 선택합니다.

    Branch 노드의 False 핀에서 드래그한 뒤 Finish Execute를 검색해 선택

  16. Blackboard 변수를 이벤트 그래프(Event Graph) 로 드래그한 뒤 Get Blackboard 를 선택합니다.

    1. Blackboard 노드에서 드래그하여 Set Value as SOClaim Handle 을 검색해 선택합니다.

    2. Branch 노드의 True 핀을 Set Value as SOClaim Handle 노드에 연결합니다.

    3. Set Value as SOClaim Handle 노드의 Key Name 핀을 우클릭한 뒤 변수로 승격(Promote to Variable) 을 선택합니다.

    4. Key Name 변수를 선택한 상태로 디테일(Details) 패널로 이동한 뒤 인스턴스 편집가능(Instance Editable) 체크 박스를 활성화합니다. 디폴트값(Default Value)ClaimHandle 로 설정합니다.

    Blackboard 노드에서 드래그한 뒤 Set Value as SOClaim Handle을 검색해 선택

    Set Value as SOClaim Handle 노드의 Key Name 핀을 우클릭한 뒤 변수로 승격 선택

    인스턴스 편집가능 체크 박스 활성화. 디폴트값을 ClaimHandle로 설정

  17. ClaimHandle 변수를 드래그한 뒤 Set Value as SOClaim Handle 노드의 Value 핀에 연결합니다.

    ClaimHandle 변수를 드래그한 뒤 Set Value as SOClaim Handle 노드의 Value 핀에 연결

  18. Set Value as SOClaim Handle 노드에서 드래그한 뒤 Finish Execute 를 검색해 선택합니다. 노드의 Success 체크 박스를 활성화합니다.

    Finish Execute 노드 추가 후 Success 체크 박스 활성화

  19. 블루프린트를 컴파일하고 저장합니다.

스마트 오브젝트 사용하기

  1. 콘텐츠 브라우저(Content Browser) 에서 BTT_UseSmartObject 를 더블 클릭해 엽니다. 이벤트 그래프(Event Graph) 에서 우클릭한 뒤 Event Receive Execute AI 를 검색해 선택합니다.

    Event Receive Execute AI 노드 추가

  2. Event Receive Execute AI 노드의 Owner Controller 핀에서 드래그한 뒤 Get Blackboard 를 검색해 선택합니다.

    Event Receive Execute AI 노드의 Owner Controller 핀에서 드래그한 뒤 Get Blackboard 를 검색해 선택

  1. Get Blackboard 노드의 Return Value 핀에서 드래그한 뒤 Get Value as SOClaim Handle 을 검색해 선택합니다.

    Get Blackboard 노드의 Return Value 핀에서 드래그한 뒤 Get Value as SOClaim Handle을 검색해 선택

  2. Get Value as SOClaim Handle 노드의 Key Name 핀을 우클릭한 뒤 변수로 승격(Promote to Variable) 을 선택합니다.

    1. Key Name 변수를 선택한 상태로 디테일(Details) 패널로 이동한 뒤 인스턴스 편집가능(Instance Editable) 체크 박스를 활성화합니다. 디폴트값(Default Value)ClaimHandle 로 설정합니다.

    인스턴스 편집가능 체크 박스 활성화. 디폴트값을 ClaimHandle로 설정

  1. Get Value as SOClaim Handle 노드의 Return Value 핀에서 드래그한 뒤 Use Claimed Smart Object 을 검색해 선택합니다.

    1. Get Value as SOClaim Handle 노드를 Use Claimed Smart Object 노드에 연결합니다.

    2. Event Receive Execute AI 노드의 Owner Controller 핀에서 드래그하여 Use Claimed Smart Object 노드의 Controller 핀에 연결합니다.

    Get Value as SOClaim Handle 노드의 Return Value 핀에서 드래그한 뒤 Use Claimed Smart Object를 검색해 선택

    Event Receive Execute AI 노드의 Owner Controller 핀에서 드래그하여 Use Claimed Smart Object 노드의 Controller 핀에 연결

  2. Use Claimed Smart Object 노드의 On Finished 핀에서 드래그한 뒤 Finish Execute 를 검색해 선택합니다. 노드의 Success 체크 박스를 활성화합니다.

    Use Claimed Smart Objects 노드의 On Finished 핀에서 드래그한 뒤 Finish Execute를 검색해 선택

  3. 블루프린트를 컴파일하고 저장합니다.

비헤이비어 트리 만들기

  1. 콘텐츠 브라우저(Content Browser) 에서 BT_SO_Agent 를 더블 클릭해 엽니다. Root 노드에서 드래그해 Selector 를 선택합니다.

    Root 노드에서 드래그해 Selector를 선택

  2. Selector 노드에서 드래그해 Sequence 를 선택합니다.

    1. Selector 노드에서 드래그해 Wait 를 선택합니다. 이 노드에 따라 에이전트가 스마트 오브젝트를 성공적으로 검색하지 못한 경우, 5초 동안 기다린 뒤 새로운 스마트 오브젝트를 찾게 됩니다.

    2. Sequence 노드가 Wait 노드의 왼쪽에 있어야 합니다. 이렇게 하면 비헤이비어 트리에서 시퀀스가 먼저 실행됩니다.

    Selector 노드에서 드래그해 Sequence를 선택

  3. Sequence 노드에서 드래그해 BTT_FindSmartObjects 를 선택합니다.

    Sequence 노드에서 드래그해 BTT_FindSmartObjects를 선택

  4. Sequence 노드에서 드래그해 BTT_UseSmartObjects 를 선택합니다.

    Sequence 노드에서 드래그해 BTT_UseSmartObjects를 선택

  5. Sequence 노드에서 드래그해 Wait 를 선택합니다. 노드를 선택한 상태에서 Wait Time2.0 으로, Random Deviation0.5 로 설정합니다. 이 노드에 따라 에이전트는 1.5~2.5초 동안 기다린 뒤 새로운 스마트 오브젝트를 찾게 됩니다.

    Sequence 노드에서 드래그해 Wait를 선택

    최종 비헤이비어 트리

  6. 비헤이비어 트리를 저장한 후 닫습니다.

섹션 결과

이 섹션에서는 에이전트가 레벨에서 스마트 오브젝트를 찾아서 사용할 수 있도록 비헤이비어 트리와 비헤이비어 트리 태스크를 만들었습니다.

6 - AI 에이전트 생성하기

이 섹션에서는 레벨에서 스마트 오브젝트를 찾아서 사용할 AI 에이전트를 만듭니다.

  1. 콘텐츠 브라우저(Content Browser) 에서 ThirdPersonCharacter 블루프린트를 더블 클릭하여 엽니다.

    ThirdPersonCharacter 블루프린트를 더블 클릭으로 열기

  2. 이벤트 그래프(Event Graph) 의 모든 노드를 선택한 뒤 삭제합니다. 이벤트 그래프(Event Graph) 에서 우클릭한 뒤 Event Possessed 를 검색해 선택합니다.

    이벤트 그래프에서 우클릭한 뒤 Event Possessed를 검색해 선택

  3. Event Possessed 노드의 New Controller 핀에서 드래그한 뒤 AI 컨트롤러에 형변환(Cast to AI Controller) 을 검색해 선택합니다. Event Possessed 노드를 AI 컨트롤러에 형변환(Cast to AI Controller) 노드에 연결합니다.

    Event Possessed 노드의 New Controller 핀에서 드래그한 뒤 AI 컨트롤러에 형변환을 검색해 선택

  4. AI 컨트롤러에 형변환(Cast to AI Controller) 노드의 As AIController 핀에서 드래그한 뒤 Run Behavior Tree 를 검색해 선택합니다. BTAsset 드롭다운을 클릭하고 BT_SO_Agent 를 선택합니다.

    AI 컨트롤러에 형변환 노드의 As AIController 핀에서 드래그한 뒤 Run Behavior Tree를 검색해 선택

  5. 블루프린트를 컴파일하고 저장합니다.

  6. 콘텐츠 브라우저(Content Browser) 에서 ThirdPerson_AnimBP 블루프린트를 더블 클릭하여 엽니다. 애님 그래프(Anim Graph) 에서 우클릭한 뒤 Default Slot 을 검색해 선택합니다.

    애님 그래프에서 우클릭한 뒤 Default Slot을 검색해 선택

  7. 디폴트(Default) 스테이트 머신을 Slot ‘Default Slot' 노드의 Source 핀에 연결합니다. Slot ‘Default Slot' 노드의 출력을 Output Pose 노드의 Results 핀에 연결합니다.

    디폴트 스테이트 머신을 Slot ‘Default Slot' 노드의 Source 핀에 연결. Slot ‘Default Slot' 노드의 출력을 Output Pose 노드의 Results 핀에 연결

섹션 결과

이 섹션에서는 레벨에서 스마트 오브젝트를 찾을 AI 에이전트 블루프린트를 만들었습니다. 또한, 애니메이션 몽타주가 올바르게 재생되도록 애니메이션 블루프린트를 수정했습니다.

7 - 스마트 오브젝트 테스트하기

이제 에이전트가 레벨 내 스마트 오브젝트를 찾아서 사용할 수 있도록 테스트할 차례입니다.

  1. 메인 툴바에서 콘텐츠 추가(Add Content)(+) > 볼륨(Volumes) > NavMeshBoundsVolume 을 클릭하여 새 내비게이션 메시(Navigation Mesh) 액터를 레벨에 추가합니다. 에이전트가 목적지까지 이동할 수 있도록 메시의 스케일을 조절해 레벨을 모두 커버합니다.

    레벨에 NavMeshBoundsVolume 추가

  2. 레벨에 여러 BP_SO_RunBT 블루프린트를 드래그합니다.

    레벨에 여러 BP_SO_RunBT 블루프린트를 드래그

  3. 레벨에 ThirdPersonCharacter 블루프린트를 드래그합니다.

    레벨에 ThirdPersonCharacter 블루프린트를 드래그

  4. 시뮬레이트(Simulate) 를 눌러 에이전트가 레벨 내 스마트 오브젝트를 찾아서 사용할 수 있는지 확인합니다.

    시뮬레이트를 눌러 에이전트가 레벨 내 스마트 오브젝트를 찾아서 사용할 수 있는지 확인

섹션 결과

이 섹션에서는 에이전트가 레벨 내 스마트 오브젝트를 찾아서 사용할 수 있다는 것을 확인했습니다.