[LayaAir 2.0]Camera.viewportToRay中origin与direction相等问题

目前使用的是LayaAir2.0版本做的以下内容.
我在一个脚本里继承了Laya.Script然后写了以下方法:
主要目的就是做射线碰撞检测.
    onStageMouseDown(): void {
this._rayPt.x = Laya.MouseManager.instance.mouseX;
this._rayPt.y = Laya.MouseManager.instance.mouseY;
GameManager.instance.mainCamera.viewportPointToRay(this._rayPt, this._ray);
let scene = this.owner.scene as Laya.Scene3D;
scene.physicsSimulation.rayCast(this._ray, this._raycastHit);
console.log(this._raycastHit.succeeded);
if(this._raycastHit.succeeded)
console.log(this._raycastHit.collider.owner.name);
}

GameManager.instance.mainCamera其实就是场景里唯一的相机(从Unity里导出的)但是屡次不能成功.后来我在调试的时候发现只要走完: GameManager.instance.mainCamera.viewportPointToRay(this._rayPt, this._ray)方法以后this._ray.origin和this._ray.direction的值就完全相同!
 
更奇妙的事情发生了,看下图:
当代码运行到4700行时out.origin还是一个正常值(与相机位置基本相同),而代码运行到4704行时,out.origin就与out.direction相同了!
aaa.jpg


aab.jpg


aac.jpg


aad.jpg

我对js引擎理解不深,不知是什么原因,请各位指教!
 
最后我的解决办法就是在GameManager.instance.mainCamera.viewportPointToRay(this._rayPt, this._ray)之后加一行:
this._ray.origin = GameManager.instance.mainCamera.transform.position即可完美执行射线碰撞检测.
 
 
已邀请:

Aar0n

赞同来自:

可以把demo传上来不,方便引擎部检查修改问题

SNAKE

赞同来自:

确认是我在创建Laya.Ray的时候使用了new Laya.Ray(Laya.Vector3.ZERO, Laya.Vector3.ZERO)这么愚蠢的做法导致的
老是忘了js没有值类型一说.
 

要回复问题请先

商务合作
商务合作