报个raycastClosest的bug

Cocos版本:3.4.2
场景只有一个Cube和一个Quad
问题有二:
1、检测不准确,在模型边缘有碰撞结果返回
2、法线不正确

代码如下:


import { Camera, Component, EventMouse, geometry, input, Input, Node, physics, Vec2, _decorator } from 'cc';
const { ccclass, property } = _decorator;

const vec2Temp = new Vec2();
const rayTemp = new geometry.Ray();

@ccclass('RaycastExample')
export class RaycastExample extends Component {
    @property(Camera)
    readonly mainCamera: Camera = null;
    @property(Node)
    readonly pointNode: Node = null;

    start() {
        input.on(Input.EventType.MOUSE_MOVE, this.onMouseMove, this);
    }

    private onMouseMove(event: EventMouse): void {
        let location = event.getLocation(vec2Temp);
        let ray = this.mainCamera.screenPointToRay(location.x, location.y, rayTemp);
        if (physics.PhysicsSystem.instance.raycastClosest(ray)) {
            const result = physics.PhysicsSystem.instance.raycastClosestResult;
            console.log("onMouseMove ", result.collider.name, result.distance);
            this.pointNode.worldPosition = result.hitPoint;
            this.pointNode.forward = result.hitNormal.negative();
        }
    }
}

返回碰撞距离distance很大,几千上万

正确法线:

错误法线:

测试场景导出的资源:
raycastBug.zip (555.5 KB)

这个感觉是2.x遗留问题,以前2.x用raycast也遇到过这类问题
法线打印出来有4个值:-1,-0,0,1;而且同一个方向入射法线还具有一定的随机性

呼叫引擎组,快来捡bug。。。

自己提的bug,自己顶一个。

creator 3.x bug还是有点多的 :rofl:

请问是什么物理后端呢

报太久,忘记了,上面有demo。
image

这个bug只有使用bullet时才会出现。目前可以通过将collider的IsTrigger勾选来绕过这个bug。

这是引擎在调用bullet ray cast时使用了其默认算法,该算法存在bug,我们会在近期解决这个问题。

版本:3.6.1
切换成cannonjs后,发现box的上下两面返回的法线是错误的。