角色动作示例
Convai 角色动作系统的渐进式示例——Inspector 设置、事件订阅、脚本化批处理注入和导航错误恢复。
最后更新于
这有帮助吗?
这有帮助吗?
[ConvaiActionDebugProbe] 第1步成功:cmd='Retrieve Extinguisher', def='Retrieve', target=Object:Extinguisherusing Convai.Runtime.Actions;
using UnityEngine;
public sealed class OnboardingTourController : MonoBehaviour
{
[SerializeField] private ConvaiActionDispatcher _dispatcher;
[SerializeField] private TrainingChecklistUI _checklist;
private void OnEnable()
{
_dispatcher.OnBatchCompleted.AddListener(HandleTourStepCompleted);
_dispatcher.OnBatchAborted.AddListener(HandleTourStepFailed);
}
private void OnDisable()
{
_dispatcher.OnBatchCompleted.RemoveListener(HandleTourStepCompleted);
_dispatcher.OnBatchAborted.RemoveListener(HandleTourStepFailed);
}
private void HandleTourStepCompleted()
{
_checklist.MarkCurrentStepComplete();
_checklist.AdvanceToNextStep();
}
private void HandleTourStepFailed()
{
_checklist.MarkCurrentStepIncomplete();
}
}using Convai.Runtime.Actions;
using UnityEngine;
public sealed class ActionFailureHandler : MonoBehaviour
{
[SerializeField] private ConvaiActionDispatcher _dispatcher;
[SerializeField] private ConvaiCharacter _character;
private void OnEnable() =>
_dispatcher.OnStepFailed.AddListener(HandleStepFailed);
private void OnDisable() =>
_dispatcher.OnStepFailed.RemoveListener(HandleStepFailed);
private void HandleStepFailed(ConvaiActionInvocation invocation)
{
if (invocation.Command.Name != "Move To") return;
string targetName = string.IsNullOrEmpty(invocation.Command.Target)
? "那个位置"
: invocation.Command.Target;
// 告诉 Convai 发生了什么,这样 NPC 就能自然地作出回应
_character.DynamicContext.AddEvent(
$"移动到 '{targetName}' 失败——路径被阻塞。" );
}
}using System.Collections.Generic;
using Convai.Runtime.Actions;
using Convai.Shared.Types;
using UnityEngine;
public sealed class DemonstrationTrigger : MonoBehaviour
{
[SerializeField] private ConvaiActionDispatcher _dispatcher;
// 从 Unity Timeline 信号、UI 按钮或游戏事件中调用此函数
public void RunDefibrillatorDemo()
{
_dispatcher.EnqueueActions(new List<ConvaiActionCommand>
{
new ConvaiActionCommand("Move To", "Equipment Cart"),
new ConvaiActionCommand("Pick Up", "Defibrillator"),
new ConvaiActionCommand("Move To", "Patient Bed"),
new ConvaiActionCommand("Point At", "Patient Bed")
});
}
}