Repository navigation
v1.10.0
⚠️ 重大变更:API 重构
本次更新进行了大规模 API 重构,引入了新的目标类型系统以支持第三方扩展。大量 API 已标记为过时,建议尽快迁移到新 API。
新增功能
-
目标类型系统重构
- 引入基于字符串的目标类型标识符系统(
ModelTargetType) - 支持第三方扩展注册自定义目标类型
- 统一所有目标类型为字符串格式(
built-in:和extension:前缀) - 新增
ModelTargetTypeRegistry用于管理目标类型注册 - 新增
ModelTargetTypeInfo类型用于扩展目标类型
- 引入基于字符串的目标类型标识符系统(
-
配置文件版本升级
UsingModel.json升级至 v2,统一使用TargetTypeModelIDs字典HideEquipmentConfig.json升级至 v2,统一使用TargetTypeHideEquipment字典IdleAudioConfig.json升级至 v2,统一使用TargetTypeIdleAudioIntervals和TargetTypeEnableIdleAudio字典ModelAudioConfig.json升级至 v2,统一使用TargetTypeEnableModelAudio字典- 所有配置文件支持自动从旧格式迁移
-
多语言显示名称支持
- 目标类型支持多语言显示名称
- 内置类型使用正式的多语言系统
- 扩展类型可通过
ModelTargetTypeInfo的GetDisplayName委托提供多语言支持
-
Animator 参数扩展
CurrentCharacterType参数新增-1值,用于标识自定义类型(Extension)- 新增
CustomCharacterTypeID参数,使用targetTypeId字符串生成的哈希值,用于唯一标识自定义目标类型 - 当
CurrentCharacterType为-1时,CustomCharacterTypeID包含自定义类型的哈希值;否则为0
-
模型应用逻辑重构
- 重构模型应用逻辑,使用优先级列表管理模型应用
ModelHandler通过优先级列表管理模型应用,支持多级优先级(如普通设置、AI 单独设置)ModelListManager通过调用UpdateModelPriorityList()方法更新各个 handler 的模型优先级列表- 刷新模型列表时按 handler 逐个处理,支持单独角色使用不同模型
已过时的 API
核心类型:
ModelTarget枚举 → 使用ModelTargetType字符串标识符ModelTargetExtensions类 → 直接使用ModelTargetType相关方法
配置类:
UsingModel:ModelIDs,AICharacterModelIDs,GetModelID(ModelTarget),SetModelID(ModelTarget, string),GetAICharacterModelID,SetAICharacterModelID等HideEquipmentConfig:HideEquipment,HideAICharacterEquipment,GetHideEquipment(ModelTarget),GetHideAICharacterEquipment等IdleAudioConfig:IdleAudioIntervals,AICharacterIdleAudioIntervals,EnableIdleAudio,AICharacterEnableIdleAudio及所有相关方法ModelAudioConfig:EnableModelAudio,AICharacterEnableModelAudio及所有相关方法
数据类:
ModelInfo:Target,SupportedAICharacters,CompatibleWithType(ModelTarget)ModelChangedEventArgs:Target,AICharacterNameKey,HandlerCount,SuccessTargetInfo:TargetType,AICharacterNameKey
管理器类:
ModelManager:InitializeModelHandler(CharacterMainControl, ModelTarget),GetAllModelHandlers(ModelTarget),GetAICharacterModelHandlersModelListManager:ApplyModelToTarget,ApplyModelToTargetType,ApplyModelToTargetAfterRefresh,ApplyAllModelsFromConfig,ApplyModelToAICharacter,RestoreOriginalModelForTarget,RestoreOriginalModelForTargetTypeModelListManager:ApplyAllAICharacterModelsFromConfig,WaitForRefreshCompletion,WaitForModelBundleReady,CurrentRefreshingBundles属性,OnRefreshProgress事件 → 已删除,不再可用
MonoBehaviour 类:
ModelHandler:Target属性,Initialize(CharacterMainControl, ModelTarget),SetTarget(ModelTarget)
详细的过时 API 列表和迁移指南请参考 docs/OBSOLETE_APIS_v1.10.0.md
改进
-
代码组织优化
- 将所有过时成员移至文件末尾的
#region 过时成员(向后兼容)区域 - 改善代码可读性,主要 API 与过时 API 分离
- 将所有过时成员移至文件末尾的
-
性能优化
ModelTargetTypeRegistry的兼容类型缓存优化,只清除相关条目而非全部清除
-
架构改进
- 将本地化逻辑从 Core 项目移至主项目
GetDisplayName方法完全在主项目中实现- 模型应用逻辑重构为事件驱动,提升可扩展性和性能
- 刷新模型列表时按 handler 逐个处理,支持单独角色使用不同模型
ModelHandler使用注册机制替代FindObjectsByType,提升性能和可靠性ModelChangedEventArgs新增Handler属性,由ModelHandler自身触发事件更新
向后兼容性
- 所有过时 API 仍然可用,但会在编译时显示警告
- 配置文件会自动从旧格式迁移到新格式
- 现有代码可以继续工作,但建议尽快迁移
Full Changelog: v1.9.5...v1.10.0