实现自定义模块
实现 `IConvaiModule` 以添加自定义运行时行为——它从 SDK 启动开始,访问运行时服务,并响应域事件。
先决条件
快速入门:最小模块
// MinimalModule.cs
using System;
using System.Collections.Generic;
using System.Threading;
using Convai.Domain.DomainEvents.Runtime;
using Convai.Runtime.Components;
using Convai.Runtime.Core.Modules;
using UnityEngine;
public class MinimalModule : MonoBehaviour, IConvaiModule
{
public string ModuleId => "my-project.minimal";
public string DisplayName => "最小模块";
public IReadOnlyList<string> RequiredModules => Array.Empty<string>();
public IReadOnlyList<Type> RequiredServices => Array.Empty<Type>();
public IReadOnlyList<Type> ProvidedServices => Array.Empty<Type>();
public bool IsActive { get; private set; }
private IDisposable _sub;
private void Awake() => ConvaiManager.ActiveManager?.RegisterModule(this);
private void OnDestroy() => ConvaiManager.ActiveManager?.UnregisterModule(this);
public System.Threading.Tasks.ValueTask RegisterAsync(IModuleContext ctx, CancellationToken ct = default)
=> System.Threading.Tasks.ValueTask.CompletedTask;
public System.Threading.Tasks.ValueTask StartAsync(IModuleContext ctx, CancellationToken ct = default)
{
_sub = ctx.Events.Subscribe<CharacterSpeechStateChanged>(e =>
{
if (e.IsSpeaking) Debug.Log($"[MinimalModule] Character {e.CharacterId} started speaking.");
});
IsActive = true;
return System.Threading.Tasks.ValueTask.CompletedTask;
}
public System.Threading.Tasks.ValueTask PauseAsync(RuntimePauseReason r, CancellationToken ct = default)
{ IsActive = false; return System.Threading.Tasks.ValueTask.CompletedTask; }
public System.Threading.Tasks.ValueTask ResumeAsync(CancellationToken ct = default)
{ IsActive = true; return System.Threading.Tasks.ValueTask.CompletedTask; }
public System.Threading.Tasks.ValueTask StopAsync(CancellationToken ct = default)
{ _sub?.Dispose(); IsActive = false; return System.Threading.Tasks.ValueTask.CompletedTask; }
}IConvaiModule 接口
生命周期方法参考
方法
何时调用
做什么
IModuleContext 服务
属性
类型
可用性
描述
实现一个模块
事件订阅者示例
服务提供者和消费者示例
注册模块
MonoBehaviour 自注册(推荐)
CreateRuntimeBuilder 重写
使用依赖注入模式
IInjectable<TDependencies>
IConvaiCharacterDependencies
属性
类型
可用性
IConvaiPlayerDependencies
属性
类型
可用性
编写一个可注入组件
使用示例
示例 1:用于医疗模拟的生物特征关联模块
示例 2:用于工业培训的评估评分模块
故障排查
症状
可能原因
修复方法
下一步
日志、指标与重试策略事件系统最后更新于
这有帮助吗?