Skip to content
导览

Class: CollisionDetectionManager

静态碰撞检测管理类

Details

静态碰撞检测管理(开启执行碰撞功能,终止碰撞功能,获取返回结果等)

Examples

typescript
this.collisionDetectionManager = cloud.getCollisionDetectionManager(); 在CreateApp时调用
this.collisionDetectionManager = cloud.getCollisionDetectionManager(); 在CreateApp时调用

Hierarchy

  • Callable

    CollisionDetectionManager

Methods

setCollisionCallback

setCollisionCallback(fn): void

Details

设置碰撞检测进度回调函数

Examples

调用示例:

ts
function changeFinished(re: any) {
    console.log(re)
}
cloud.collisionDetectionManager.setCollisionCallback(changeFinished)
function changeFinished(re: any) {
    console.log(re)
}
cloud.collisionDetectionManager.setCollisionCallback(changeFinished)

Parameters

NameTypeDescription
fn(CollisionProgressInfo: CollisionProgress) => void回调函数,CollisionProgressInfo指碰撞检测进度信息(包含进度百分比信息,只有当进度为100%才能获取结果)

Returns

void


collisionCheck

collisionCheck(sampleA, sampleB, collisionType, tolerance): Promise<boolean>

Details

开始执行静态碰撞检测。硬碰撞:两对象发生实际相交,表面最小距离小于容差值的相反数(例如10mm的相反数为-10mm)。软碰撞:两对象未发生实际相交,表面最小距离小于容差值。

Examples

调用示例:

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]])

ret = await cloud.collisionDetectionManager.collisionCheck(pNode1!, pNode2!,CollisionType.HardCollide,10)
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]])

ret = await cloud.collisionDetectionManager.collisionCheck(pNode1!, pNode2!,CollisionType.HardCollide,10)

Parameters

NameTypeDescription
sampleAVirtualNode待进行碰撞检测的虚拟节点A
sampleBVirtualNode待进行碰撞检测的虚拟节点B
collisionTypenull | CollisionType碰撞类型 硬碰撞:CollisionType.HardCollide; 软碰撞:CollisionType.SoftCollide
tolerancenull | number容差(单位为米),硬碰撞需要碰撞节点重合的距离的绝对值大于等于容差(距离为负值),软碰撞需要碰撞节点的最小距离小于等于容差(距离为正值)

Returns

Promise<boolean>

是否成功开启碰撞检测(同一时间只允许开启一个检测)

collisionCheck(sampleA, sampleB): Promise<boolean>

Parameters

NameType
sampleAVirtualNode
sampleBVirtualNode

Returns

Promise<boolean>


stopCollisionCheck

stopCollisionCheck(): Promise<any>

Details

终止静态碰撞检测

Examples

调用示例:

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()

Returns

Promise<any>


getCollisionCheckResult

getCollisionCheckResult(): Promise<CollisionResult[]>

Details

获取静态碰撞检测结果(只有当静态碰撞检测进度100%时才可获取结果)

Examples

调用示例:

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()

Returns

Promise<CollisionResult[]>

碰撞检测结果