NPC 서브트리 인스턴스화

This commit is contained in:
Jeonghyeon Ha 2025-08-28 18:58:01 +09:00
parent 3eeed819b2
commit 45ae01777a

View File

@ -46,11 +46,19 @@ private async Task InitializeAiInternal(CustomerDataEntry inCustomerDataEntry)
subtree = await customerState.GetOrLoadSubtree(inCustomerDataEntry.CustomerType);
}
_behaviorTree.Subgraph = subtree;
// 에이전트 간 상태 공유를 방지하기 위해 서브트리 에셋을 런타임 인스턴스로 복제하여 사용합니다.
// Addressables에서 로드한 원본 Subtree(ScriptableObject)를 그대로 공유하면 변수/태스크 상태가 섞일 수 있습니다.
var subtreeInstance = subtree != null ? ScriptableObject.Instantiate(subtree) : null;
if (subtreeInstance == null)
{
Debug.LogError("[CustomerAiComponent] Subtree instance is null. AI 초기화 중단.");
return;
}
_behaviorTree.Subgraph = subtreeInstance;
// 블랙보드는 이 BehaviorTree 인스턴스에 바인딩되어야 에이전트별 스코프가 분리됩니다.
_blackboardComponent.InitializeWithBehaviorTree(_behaviorTree);
_blackboardComponent.SetCustomerData(inCustomerDataEntry.Id);
// TODO : 1. Subtree - Action, Condition
// TODO : 2. Blackboard
_behaviorTree.StartBehavior();
}
}