用raycast选取实体,hitresult始终是false

按照官方范例,Laya.Physics.raycast方法已经不能用了;
 
从网上找了physicsSimulation.raycast方法,但无论如何,outHitResult的结果都是false,不知道哪里设置不正确
 
另外,射线的位置和方向也很奇怪,好像并没有穿过viewport中鼠标点击的位置,请看附件中的源代码
 

WechatIMG1554.png

 

两个问题:
 
1.  看运行情况,射线应该是穿越了某些plane实体,但outHitResult.succeeded仍然是false,且collider也是null,方法用错了吗?
 
2.  截图中射线的方向对吗,camera的位置是0,0,4,但射线的起点看起来是0,0,0,这是为什么?
 
貌似要为实体添加碰撞组件,但不知道该如何添加 
点击事件的核心代码就那么点:
 
//**** 监测鼠标点击碰撞 */
var point = new Laya.Vector2();
var ray: Laya.Ray = new Laya.Ray(new Laya.Vector3(2, 2, 2), new Laya.Vector3(3, 3, 3));
var outHitResult: Laya.HitResult = new Laya.HitResult();
point.x = Laya.MouseManager.instance.mouseX;
point.y = Laya.MouseManager.instance.mouseY;

console.log("rayPoint111 pointx:"+ point.x+" pointy:"+point.y+ " ray.origin.x:"+ray.origin.x+ " ray.origin.y:"+ray.origin.y+ " ray.origin.z:"+ray.origin.z+" ray.direction.x:"+ray.direction.x+" ray.direction.y:"+ray.direction.y+" ray.direction.z:"+ray.direction.z);
//产生射线
this.camera.viewportPointToRay(point, ray);//从摄像机到鼠标点击位置生成射线
console.log("rayPoint222 pointx:"+ point.x+" pointy:"+point.y+ " ray.origin.x:"+ray.origin.x+ " ray.origin.y:"+ray.origin.y+ " ray.origin.z:"+ray.origin.z+" ray.direction.x:"+ray.direction.x+" ray.direction.y:"+ray.direction.y+" ray.direction.z:"+ray.direction.z);
//拿到射线碰撞的物体
this.myScene.physicsSimulation.rayCastAll(ray, outHitResult);

//如果碰撞到物体
console.log("outHitResult:", outHitResult);
var lineSprite: Laya.PixelLineSprite3D = this.myScene.addChild(new Laya.PixelLineSprite3D(5)) as Laya.PixelLineSprite3D;
lineSprite.addLine(ray.origin, ray.direction, Laya.Color.BLUE, Laya.Color.RED);
this.lineSprite.addChild(lineSprite);
if (outHitResult.succeeded) {
//删除碰撞到的物体
// this.text.text = "碰撞到了" + outHitResult.collider.owner.name;
console.log("碰撞到物体!!" + outHitResult.collider.owner.name)
}
已邀请:

陆仁毅

赞同来自:

outHitResult返回的是一个数组。你需要检测是否有碰撞结果。射线的direction是射线的方向

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作