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的时间增量使用场景
插件管理
- 统一管理各种功能插件
- 支持插件的动态注册和移除
- 提供插件的统一访问接口
渲染更新
- 支持需要每帧更新的插件
- 支持静态插件(不需要更新)
- 提供高效的插件更新机制
资源管理
- 提供插件的生命周期管理
- 支持插件的资源清理
- 防止内存泄漏
扩展性
- 支持自定义插件的开发
- 提供插件开发的基础框架
- 支持插件的热插拔
相关链接
- Plugin - 插件基类
- Viewer3D - 主引擎类
- SceneManager - 场景管理器