Skip to content

ExtensionManager

扩展管理器类,负责管理3D场景中的插件系统,提供插件的注册、获取、移除和更新功能。支持两种类型的插件:参与渲染更新的插件和静态插件。

类定义

javascript
class ExtensionManager

方法

getPlugin(key, isUpdate)

根据键值获取插件,根据指定的键值和插件类型获取已注册的插件实例。

参数:

  • key {string} - 插件的注册编码(唯一标识)
  • isUpdate {boolean} - 该插件是否在每次渲染中更新

返回值:

  • {Plugin|null} 返回插件实例,如果未找到则返回null

示例:

javascript
// 获取需要更新的插件
const measurePlugin = extensionManager.getPlugin('measureTool', true);

// 获取静态插件
const viewCubePlugin = extensionManager.getPlugin('viewCube', false);

if (measurePlugin) {
    console.log('找到测量工具插件');
}

addPlugin(key, value, isUpdate)

注册插件,将插件注册到扩展管理器中,支持两种类型的插件注册。

参数:

  • key {string} - 插件的注册编码(唯一标识)
  • value {Plugin} - 要注册的插件实例,必须具有isPlugin属性
  • isUpdate {boolean} - 是否需要在每次渲染中更新该插件

示例:

javascript
// 注册一个需要更新的测量工具插件
extensionManager.addPlugin('measureTool', measurePlugin, true);

// 注册一个静态的视图立方体插件
extensionManager.addPlugin('viewCube', viewCubePlugin, false);

// 注册一个动画插件(需要更新)
extensionManager.addPlugin('animation', animationPlugin, true);

pluginCount()

获取已注册插件的总数,返回所有已注册插件的数量,包括需要更新的插件和静态插件。

返回值:

  • {number} 已注册插件的总数

示例:

javascript
// 获取插件总数
const totalPlugins = extensionManager.pluginCount();
console.log(`当前共有 ${totalPlugins} 个插件`);

// 检查是否有插件
if (extensionManager.pluginCount() > 0) {
    console.log('系统中已注册插件');
}

removePlugin(key, isUpdate)

移除已注册的插件,从扩展管理器中移除指定的插件,并调用插件的dispose方法清理资源。

参数:

  • key {string} - 插件的注册编码
  • isUpdate {boolean} - 该插件是否在每次渲染中更新

返回值:

  • {boolean} 移除是否成功

示例:

javascript
// 移除需要更新的插件
const removed = extensionManager.removePlugin('measureTool', true);
if (removed) {
    console.log('测量工具插件已移除');
}

// 移除静态插件
extensionManager.removePlugin('viewCube', false);

dispose()

销毁所有插件,清理所有已注册的插件,调用每个插件的dispose方法释放资源。通常在应用关闭或场景切换时调用。

示例:

javascript
// 销毁所有插件
extensionManager.dispose();

// 在应用关闭时调用
window.addEventListener('beforeunload', () => {
    extensionManager.dispose();
});

update(delta)

更新所有需要更新的插件,在渲染循环中调用,更新所有标记为需要更新的插件。每个插件都会接收到delta时间参数用于动画和状态更新。

参数:

  • delta {number} - 时间增量(秒),通常来自渲染循环的时间差

示例:

javascript
// 在渲染循环中更新插件
function render() {
    const delta = clock.getDelta();
    extensionManager.update(delta);
    
    renderer.render(scene, camera);
    requestAnimationFrame(render);
}

// 手动更新插件
extensionManager.update(0.016); // 约60FPS的时间增量

使用场景

插件管理

  • 统一管理各种功能插件
  • 支持插件的动态注册和移除
  • 提供插件的统一访问接口

渲染更新

  • 支持需要每帧更新的插件
  • 支持静态插件(不需要更新)
  • 提供高效的插件更新机制

资源管理

  • 提供插件的生命周期管理
  • 支持插件的资源清理
  • 防止内存泄漏

扩展性

  • 支持自定义插件的开发
  • 提供插件开发的基础框架
  • 支持插件的热插拔

相关链接

文档内容为北京逆维悦动科技有限公司版权所有,禁止未授权转载