静态碰撞检测 CollisionDetectionManager
静态碰撞检测管理器是用于控制云渲染静态碰撞检测的工具,通过获取该管理器,用户可以方便地进行静态碰撞检测的控制和管理。 该工具的主要功能包括:
- 开始执行静态碰撞检测
- 终止静态碰撞检测
- 获取静态碰撞检测结果
- 设置碰撞检测进度回调函数
我们将提供详细的使用指南和功能说明,帮助用户更好地使用该工具。
CollisionDetectionManager
用户可以调用云渲染实例 cloud
上的 getCollisionDetectionManager()
方法来获取 CollisionDetectionManager
静态碰撞检测管理器。
ts
const CollisionDetectionManager = await cloud.getCollisionDetectionManager()
const CollisionDetectionManager = await cloud.getCollisionDetectionManager()
用户调用 cloud.getCollisionDetectionManager()
后,CollisionDetectionManager
会被自动挂载到当前 cloud
实例上。
ts
await cloud.getCollisionDetectionManager()
await cloud.getCollisionDetectionManager()
开始执行静态碰撞检测 | collisionCheck
- 说明:开始执行静态碰撞检测
我们可以调用 CollisionDetectionManager
上面的 collisionCheck
方法来设置开始执行静态碰撞检测的功能。
- 参数说明
Name | Type | Description |
---|---|---|
sampleA | VirtualNode | 待进行碰撞检测的虚拟节点A |
sampleB | VirtualNode | 待进行碰撞检测的虚拟节点B |
静态碰撞检测
静态碰撞检测基于fcl,对检测节点进行快速的相交性测试。静态碰撞检测返回的数据,如相交则返回碰撞点的位置,否则返回相距的距离。
调用示例:
ts
await cloud.getCollisionDetectionManager()
const pVt = await cloud.sceneManager.getVTreeManager()
const node = await pVt.getVirtualRoot()
const node1 = await cloud.sceneManager.getNodeByGuid(['b2d29365fa2983b378174110294378c5'])
const node2 = await cloud.sceneManager.getNodeByGuid(['43054e6f96c13bea6d62092b6867135f'])
const pNode1 = await pVt.createVirtualNode('111', emVirtualNodeType.Node_UnCertain, node!, [node1![0]])
const pNode2 = await pVt.createVirtualNode('222', emVirtualNodeType.Node_UnCertain, node!, [node2![0]])
const ret = await cloud.collisionDetectionManager.collisionCheck(pNode1!, pNode2!)
await cloud.getCollisionDetectionManager()
const pVt = await cloud.sceneManager.getVTreeManager()
const node = await pVt.getVirtualRoot()
const node1 = await cloud.sceneManager.getNodeByGuid(['b2d29365fa2983b378174110294378c5'])
const node2 = await cloud.sceneManager.getNodeByGuid(['43054e6f96c13bea6d62092b6867135f'])
const pNode1 = await pVt.createVirtualNode('111', emVirtualNodeType.Node_UnCertain, node!, [node1![0]])
const pNode2 = await pVt.createVirtualNode('222', emVirtualNodeType.Node_UnCertain, node!, [node2![0]])
const ret = await cloud.collisionDetectionManager.collisionCheck(pNode1!, pNode2!)
终止静态碰撞检测 | stopCollisionCheck
- 说明:终止静态碰撞检测
我们可以调用 CollisionDetectionManager
上面的 stopCollisionCheck
方法来终止静态碰撞检测。
调用示例:
ts
await cloud.getCollisionDetectionManager()
const pVt = await cloud.sceneManager.getVTreeManager()
const node = await pVt.getVirtualRoot()
const node1 = await cloud.sceneManager.getNodeByGuid(['b2d29365fa2983b378174110294378c5'])
const node2 = await cloud.sceneManager.getNodeByGuid(['43054e6f96c13bea6d62092b6867135f'])
const pNode1 = await pVt.createVirtualNode('111', emVirtualNodeType.Node_UnCertain, node!, [node1![0]])
const pNode2 = await pVt.createVirtualNode('222', emVirtualNodeType.Node_UnCertain, node!, [node2![0]])
await cloud.collisionDetectionManager.collisionCheck(pNode1!, pNode2!)
await collisionDetectionManager.stopCollisionCheck()
await cloud.getCollisionDetectionManager()
const pVt = await cloud.sceneManager.getVTreeManager()
const node = await pVt.getVirtualRoot()
const node1 = await cloud.sceneManager.getNodeByGuid(['b2d29365fa2983b378174110294378c5'])
const node2 = await cloud.sceneManager.getNodeByGuid(['43054e6f96c13bea6d62092b6867135f'])
const pNode1 = await pVt.createVirtualNode('111', emVirtualNodeType.Node_UnCertain, node!, [node1![0]])
const pNode2 = await pVt.createVirtualNode('222', emVirtualNodeType.Node_UnCertain, node!, [node2![0]])
await cloud.collisionDetectionManager.collisionCheck(pNode1!, pNode2!)
await collisionDetectionManager.stopCollisionCheck()
获取静态碰撞检测结果 | getCollisionCheckResult
- 说明:获取静态碰撞检测结果(只有当静态碰撞检测进度100%时才可获取结果)
我们可以调用 CollisionDetectionManager
上面的 getCollisionCheckResult
方法来获取静态碰撞检测结果。
调用示例:
ts
await cloud.getCollisionDetectionManager()
const pVt = await cloud.sceneManager.getVTreeManager()
const node = await pVt.getVirtualRoot()
const node1 = await cloud.sceneManager.getNodeByGuid(['b2d29365fa2983b378174110294378c5'])
const node2 = await cloud.sceneManager.getNodeByGuid(['43054e6f96c13bea6d62092b6867135f'])
const pNode1 = await pVt.createVirtualNode('111', emVirtualNodeType.Node_UnCertain, node!, [node1![0]])
const pNode2 = await pVt.createVirtualNode('222', emVirtualNodeType.Node_UnCertain, node!, [node2![0]])
await cloud.collisionDetectionManager.collisionCheck(pNode1!, pNode2!)
const info = await collisionDetectionManager.getCollisionCheckResult()
await cloud.getCollisionDetectionManager()
const pVt = await cloud.sceneManager.getVTreeManager()
const node = await pVt.getVirtualRoot()
const node1 = await cloud.sceneManager.getNodeByGuid(['b2d29365fa2983b378174110294378c5'])
const node2 = await cloud.sceneManager.getNodeByGuid(['43054e6f96c13bea6d62092b6867135f'])
const pNode1 = await pVt.createVirtualNode('111', emVirtualNodeType.Node_UnCertain, node!, [node1![0]])
const pNode2 = await pVt.createVirtualNode('222', emVirtualNodeType.Node_UnCertain, node!, [node2![0]])
await cloud.collisionDetectionManager.collisionCheck(pNode1!, pNode2!)
const info = await collisionDetectionManager.getCollisionCheckResult()
设置碰撞检测进度回调函数 | setCollisionCallback
- 说明:设置碰撞检测进度回调函数
我们可以调用 CollisionDetectionManager
上面的 setCollisionCallback
方法来获取静态碰撞检测结果。
- 参数说明
Name | Type | Description |
---|---|---|
fn | (CollisionProgressInfo : CollisionProgress ) => void | 回调函数,CollisionProgressInfo指碰撞检测进度信息(包含进度百分比信息,只有当进度为100%才能获取结果) |
调用示例:
ts
function changeFinished(re: any) {
console.log(re)
}
cloud.collisionDetectionManager.setCollisionCallback(changeFinished)
function changeFinished(re: any) {
console.log(re)
}
cloud.collisionDetectionManager.setCollisionCallback(changeFinished)