先放代码:
import { _decorator, Component, Node, input, Input,EventTouch, EventMouse, math, Vec2, Vec3} from ‘cc’;
import { geometry, Camera,PhysicsSystem } from ‘cc’;
const { ccclass, property } = _decorator;
@ccclass(‘RayTest’)
export class RayTest extends Component {
@property(Camera)
private cameraCom: Camera;
@property(Node)
demo:Node;
private _ray = new geometry.Ray();
start() {
input.on(Input.EventType.MOUSE_DOWN,this.clickFunc,this);
// 获得一条途径屏幕坐标(0,0)发射出的一条射线
const outRay = new geometry.Ray();
//this.cameraCom.screenPointToRay(0, 0, outRay);
}
update(deltaTime: number) {
}
public clickFunc(event:EventMouse){
console.log("getUILocation:",event.getUILocation());
console.log("getLocation:",event.getLocation());
console.log("getLocationInView:",event.getLocationInView());
this.cameraCom.screenPointToRay(event.getLocationX(), event.getLocationY(), this._ray);
console.log("ray:",this._ray);
//基于物理碰撞器的射线检测
if (PhysicsSystem.instance.raycast(this._ray)) {
const r = PhysicsSystem.instance.raycastResults;
for (let i = 0; i < r.length; i++) {
const item = r[i];
//if (item.collider.node.uuid == this.Model.uuid) {
//射线检测到的物体如果是Model的话执行这里
//}
console.log("item.collider.node.uuid:",item.collider.node);
}
}
}
}
项目是这样的其中Cube是那个方块,有BoxCollied,并且不会动

我运行游戏然后对着方块一顿狂点,然后结果是有些帧有射线检测结果,有些帧则没有,我有把Ray印出来,可以看到Ray是一模一样的,然是前一帧没有触发 console.log(“item.collider.node.uuid:”,item.collider.node);后一帧却触发了
有人知道是怎么回事吗?这个薛定谔的射线检测如果发生在真正上线的游戏里会造成灾难性的使用者体验吧