Enable body tracking on both voice and text input
Body tracking is now activated by ElevenLabsComponent directly in StartListening() and SendTextMessage(), instead of being managed by InteractionComponent. This ensures the agent turns its body toward the player on any form of conversation input. InteractionComponent still disables body tracking on deselection. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
92a8b70a7f
commit
301efee982
@ -2,6 +2,7 @@
|
||||
|
||||
#include "PS_AI_ConvAgent_ElevenLabsComponent.h"
|
||||
#include "PS_AI_ConvAgent_MicrophoneCaptureComponent.h"
|
||||
#include "PS_AI_ConvAgent_PostureComponent.h"
|
||||
#include "PS_AI_ConvAgent_InteractionSubsystem.h"
|
||||
#include "PS_AI_ConvAgent.h"
|
||||
|
||||
@ -312,6 +313,17 @@ void UPS_AI_ConvAgent_ElevenLabsComponent::StartListening()
|
||||
Mic->StartCapture();
|
||||
}
|
||||
|
||||
// Enable body tracking on the sibling PostureComponent (if present).
|
||||
// Voice input counts as conversation engagement, same as text.
|
||||
if (AActor* OwnerActor = GetOwner())
|
||||
{
|
||||
if (UPS_AI_ConvAgent_PostureComponent* Posture =
|
||||
OwnerActor->FindComponentByClass<UPS_AI_ConvAgent_PostureComponent>())
|
||||
{
|
||||
Posture->bEnableBodyTracking = true;
|
||||
}
|
||||
}
|
||||
|
||||
const double T = TurnStartTime - SessionStartTime;
|
||||
UE_LOG(LogPS_AI_ConvAgent_ElevenLabs, Log, TEXT("[T+%.2fs] [Turn %d] Mic opened%s — user speaking."),
|
||||
T, TurnIndex, bExternalMicManagement ? TEXT(" (external)") : TEXT(""));
|
||||
@ -404,6 +416,17 @@ void UPS_AI_ConvAgent_ElevenLabsComponent::SendTextMessage(const FString& Text)
|
||||
return;
|
||||
}
|
||||
WebSocketProxy->SendTextMessage(Text);
|
||||
|
||||
// Enable body tracking on the sibling PostureComponent (if present).
|
||||
// Text input counts as conversation engagement, same as voice.
|
||||
if (AActor* Owner = GetOwner())
|
||||
{
|
||||
if (UPS_AI_ConvAgent_PostureComponent* Posture =
|
||||
Owner->FindComponentByClass<UPS_AI_ConvAgent_PostureComponent>())
|
||||
{
|
||||
Posture->bEnableBodyTracking = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UPS_AI_ConvAgent_ElevenLabsComponent::InterruptAgent()
|
||||
|
||||
@ -198,8 +198,11 @@ void UPS_AI_ConvAgent_InteractionComponent::SetSelectedAgent(UPS_AI_ConvAgent_El
|
||||
if (bAutoManageListening)
|
||||
{
|
||||
OldAgent->StopListening();
|
||||
}
|
||||
|
||||
// Disable body tracking — eyes+head will return to neutral via posture detach.
|
||||
// Disable body tracking on deselection.
|
||||
if (bAutoManagePosture)
|
||||
{
|
||||
if (UPS_AI_ConvAgent_PostureComponent* Posture = FindPostureOnAgent(OldAgent))
|
||||
{
|
||||
Posture->bEnableBodyTracking = false;
|
||||
@ -247,15 +250,11 @@ void UPS_AI_ConvAgent_InteractionComponent::SetSelectedAgent(UPS_AI_ConvAgent_El
|
||||
}
|
||||
|
||||
// ── Listening: start ─────────────────────────────────────────────
|
||||
// Body tracking is enabled by ElevenLabsComponent itself (in StartListening
|
||||
// and SendTextMessage) so it works for both voice and text input.
|
||||
if (bAutoManageListening)
|
||||
{
|
||||
NewAgent->StartListening();
|
||||
|
||||
// Now that we're talking, enable full body tracking.
|
||||
if (UPS_AI_ConvAgent_PostureComponent* Posture = FindPostureOnAgent(NewAgent))
|
||||
{
|
||||
Posture->bEnableBodyTracking = true;
|
||||
}
|
||||
}
|
||||
|
||||
// ── Posture: attach ──────────────────────────────────────────────
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user