Appearance
plugin-soonmanager2-sync
SoonManager2.0 平台 生产的场景加载及数据读取。
注意
此插件为 CPS 平台旧版资源使用,新版资源包请使用 cps-soonmanager 插件
样例
安装
bash
npm install @soonspacejs/plugin-soonmanager2-sync -S
# or
yarn add @soonspacejs/plugin-soonmanager2-sync -S使用方法
js
import SoonSpace from 'soonspacejs';
import Soonmanager2SyncPlugin from '@soonspacejs/plugin-soonmanager2-sync';
const ssp = new SoonSpace({
el: '#view',
options: {},
events: {},
});
const soonmanager2Sync = ssp.registerPlugin(
Soonmanager2SyncPlugin,
'soonmanager2Sync'
);
console.log(soonmanager2Sync);属性
path
资源加载的基础路径
- 默认值:
'' - 类型:
string
metaData
场景元数据
- 默认值:
null - 类型:
IMetadata | null
定义
ts
interface IMetadata {
platformVersion: number;
version: number;
name: string;
projectId: string;
sceneId: string;
cover: string | null;
flatModel: string;
treeModel: string;
exportTime: number;
}treeData
场景树数据
- 默认值:
null - 类型:
ITreeData[] | null
定义
ts
interface ITreeData {
id: string;
pid: string | null;
name: string;
renderType: 'GROUP' | '3D' | 'ROOM' | 'STUB';
matrix: number[];
path: string | null;
children: ITreeData[];
}topologyData
拓扑路径数据
- 默认值:
null - 类型:
TopologyInfo[]|null
propertiesData
自定义属性数据,根据 modelId 分组
- 默认值:
null - 类型:
TPropertiesMap | null
定义
ts
interface IProperties {
modelId: string;
group: string;
key: string;
value: string | null;
label: string | null;
}
type TPropertiesMap = Map<IProperties['modelId'], IProperties[]>;animationsData
补间动画数据,根据 modelId 分组
- 默认值:
null - 类型:
TAnimationsMap | null
定义
ts
interface IKeyframe {
id: string;
uuid: string;
x: number;
y: number;
z: number;
scaleX: number;
scaleY: number;
scaleZ: number;
rotationX: number;
rotationY: number;
rotationZ: number;
easing: AnimationModeType;
mode: string;
delay: number;
duration: number;
repeat: number;
yoyo: boolean;
}
/**
* 动画
*/
interface IAnimations {
id: string;
uuid: string;
modelId: string;
name: string;
keyframes: IKeyframe[];
}
type TAnimationsMap = Map<IAnimations['modelId'], IAnimations[]>;modelVisionsData
模型视角数据,根据 nodeId 分组
- 默认值:
null - 类型:
TModelVisionsMap | null
定义
ts
interface IModelVisions {
id: string;
uuid: string;
nodeId: string;
name: string;
code?: any;
position: IVector3;
rotation: IVector3;
target: IVector3;
}
type TModelVisionsMap = Map<IModelVisions['nodeId'], IModelVisions>;方法
setPath
设置加载资源的基础路径
定义
ts
function setPath(path: string): void;用法
js
soonmanager2Sync.setPath('./models');
// or
soonmanager2Sync.setPath('http://xxx.com/models');注意
插件的其他方法依赖于 path,需要先设置才能使用
loadScene
加载场景对象
定义
ts
interface ILoadSceneOptions {
/**
* 同步自定义属性
*/
syncProperties?: boolean;
/**
* 同步模型视角数据
*/
syncModelVisions?: boolean;
/**
* 计算 bounds tree
*/
needsModelsBoundsTree?: boolean;
}
function loadScene(options?: ILoadSceneOptions): Promise<void>;用法
js
soonmanager2Sync.loadScene().then(() => {
console.log('场景对象加载完成');
});提示
如果你需要使用 Worker 计算 BVH,可以关闭默认行为
js
soonmanager2Sync.loadScene({ needsModelsBoundsTree: false }).then(() => {
ssp.computeModelsBoundsTree({
type: 'worker',
workerCreator,
});
});具体请查看 computeModelsBoundsTree
参数
options
- 描述: 场景加载选项
- 必填:
- 类型:
ILoadSceneOptions
ILoadSceneOptions
| 属性 | 描述 | 类型 | 必填 | 默认值 |
|---|---|---|---|---|
| syncProperties | 是否同步自定义属性 | boolean | true | |
| syncModelVisions | 是否同步节点视角数据 | boolean | true | |
| needsModelsBoundsTree | 场景加载完成后调用 computeModelsBoundsTree 方法 | boolean | true |
提示
自定义属性存储在对象的 userData.properties 属性上
getTopologies
获取拓扑路径数据
定义
ts
function getTopologies(): Promise<TopologyInfo[]>;用法
js
soonmanager2Sync.getTopologies().then((topologies) => {
const [t1] = topologies;
/**
* 使用获取到的数据直接创建拓扑路径
*/
ssp.createTopology(t1);
});playAnimationById
根据对象 id 播放补间动画
定义
ts
type TAnimationsTweenProps = Pick<
IKeyframe,
| 'x'
| 'y'
| 'z'
| 'rotationX'
| 'rotationY'
| 'rotationZ'
| 'scaleX'
| 'scaleY'
| 'scaleZ'
>;
interface IPlayAnimationByIdOptions {
onUpdate?: (
source: TAnimationsTweenProps,
tween: Tween<TAnimationsTweenProps>
) => void;
onStart?: (tween: Tween<TAnimationsTweenProps>) => void;
}
function playAnimationById(
id: string,
animationIndex?: number,
options?: IPlayAnimationByIdOptions
): Promise<void>;用法
js
soonmanager2SyncPlugin.playAnimationById('4H6T1H53CSFW', 0, {
onUpdate: (source, tween) => {},
onStart: (tween) => {
/**
* 包含多个帧动画时,每个动画帧开始时 onStart 都会执行
*/
console.log(tween);
},
});参数
id
- 描述: 要播放动画的对象
id - 必填:
- 类型:
string
animationIndex
- 描述: 该动画所在数据列表中的下标
- 必填:
- 默认值:
0 - 类型:
number
options
- 描述: 动画播放选项
- 必填:
- 类型:
IPlayAnimationByIdOptions
IPlayAnimationByIdOptions
| 属性 | 描述 | 类型 | 必填 | 默认值 |
|---|---|---|---|---|
| onUpdate | 动画更新回调 | IPlayAnimationByIdOptions['onUpdate'] | ||
| onStart | 动画开始回调 | IPlayAnimationByIdOptions['onStart'] |
提示
动画播放时,可以是多个 animation 的组合
所以每次执行新的 animation 方法时都会执行 onStart 回调并且返回新的 tween 实例
fetchMetaData
根据当前 path 获取场景元数据
定义
ts
function fetchMetaData(): Promise<IMetadata>;用法
ts
soonmanager2SyncPlugin.fetchMetaData().then((metaData) => {
console.log(fetchMetaData);
});fetchTreeData
根据当前 path 获取场景树数据
定义
ts
function fetchTreeData(): Promise<ITreeData[]>;用法
ts
soonmanager2SyncPlugin.fetchTreeData().then((treeData) => {
console.log(treeData);
});提示
调用 loadScene 时,内部会使用此方法获取场景树数据
fetchPropertiesData
根据当前 path 获取自定义属性数据
定义
ts
function fetchPropertiesData(): Promise<TPropertiesMap>;用法
ts
soonmanager2SyncPlugin.fetchPropertiesData().then((propertiesData) => {
console.log(propertiesData);
});fetchAnimationsData
根据当前 path 获取补间动画数据
定义
ts
function fetchAnimationsData(): Promise<TAnimationsMap>;用法
ts
soonmanager2SyncPlugin.fetchAnimationsData().then((animationsData) => {
console.log(animationsData);
});fetchModelVisionsData
根据当前 path 获取模型视角数据
定义
ts
function fetchModelVisionsData(): Promise<TModelVisionsMap>;用法
ts
soonmanager2SyncPlugin.fetchModelVisionsData().then((modelVisions) => {
console.log(modelVisions);
});