• 碰撞检测
    • 射线检测

    碰撞检测

    文: youyou

    Cocos Creator 提供了一套用于检测 3D 物体碰撞的 API,用户可以使用这些 API 做射线检测之类的检测。

    射线检测

    • cc.geomUtils.intersect.raycast(rootNode, ray, handler, filter)
    1. // 根据点击的点获取一条由屏幕射向屏幕内的射线
    2. let ray = camera.getRay(touchPos);
    3. // 根据传入的根节点向下检测,并返回检测结果
    4. // 返回的结果包含了节点和距离
    5. let results = cc.geomUtils.intersect.raycast(cc.director.getScene(), ray);
    6. for (let i = 0; i < results.length; i++) {
    7. results[i].node.opacity = 100;
    8. }

    如果希望检测的更精确,可以传入一个 handler 函数来进行检测。

    1. let handler = function (modelRay, node, distance) {
    2. // modelRay 为 ray 转换到 node 本地坐标系下的射线
    3. let meshRenderer = node.getComponent(cc.MeshRenderer);
    4. if (meshRenderer && meshRenderer.mesh) {
    5. // 如果有 mesh renderer,则对 mesh 进行检测,虽然比较消耗性能,但是检测会更加精确
    6. return cc.geomUtils.intersect.rayMesh(modelRay, meshRenderer.mesh);
    7. }
    8. // 返回
    9. return distance;
    10. };
    11. let results = cc.geomUtils.intersect.raycast(cc.director.getScene(), ray, handler);