我正在尝试创建一个游戏,其中涉及向物体发射激光并让激光从物体上反射,但激光有时似乎会穿过物体。我注意到第二次光线投射将在场景的原点结束,而不是从对象反射,即使这意味着穿过对象。
这是我的意思的图片:
有时它会从物体反射,但仍然穿过原点。
这是我迄今为止反映的代码:
if(hit.collider.gameObject.tag == "Reflect"){
hit2 = Physics2D.Raycast(hit.point, -hit.point); //The problem is probably here
Debug.DrawLine(hit.point, hit2.point);
lineRenderer.SetPosition(2, hit2.point);
}
我尝试过使用 Vector2.Reflect 方法,但它做了同样的事情。我尝试过使用 hit.normal,但这也不起作用。我也尝试过使用射线并将方向设置为与射线方向相反,但这不起作用。
肯定有更精致的方法,但我就是这样做的。你需要知道如何绘制射线。反射点和反射角。您可以从源中拍摄另外两个角度变化较小的光线投射,通过简单的几何形状,您可以找到目标表面的角度。 所以分步骤 1-进行光线投射并获取击中点的位置
2- 在两个方向上再进行两次大约一度的光线投射,并获取每个方向的距离
3-使用这 2 个数字来使用余弦计算角度。(您正在制作一个具有角度和两条边的三角形)
4-最终根据第一步得到的点和第三步得到的角度创建铸件