Skip to content
导览

静态碰撞检测 CollisionDetectionManager

静态碰撞检测管理器是用于控制云渲染静态碰撞检测的工具,通过获取该管理器,用户可以方便地进行静态碰撞检测的控制和管理。 该工具的主要功能包括:

  1. 开始执行静态碰撞检测
  2. 终止静态碰撞检测
  3. 获取静态碰撞检测结果
  4. 设置碰撞检测进度回调函数

我们将提供详细的使用指南和功能说明,帮助用户更好地使用该工具。

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 方法来设置开始执行静态碰撞检测的功能。

  • 参数说明
NameTypeDescription
sampleAVirtualNode待进行碰撞检测的虚拟节点A
sampleBVirtualNode待进行碰撞检测的虚拟节点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 方法来获取静态碰撞检测结果。

  • 参数说明
NameTypeDescription
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)