如何在 Unity 2D 中正确反射来自碰撞体的激光?

问题描述 投票:0回答:1

我正在尝试创建一个游戏,其中涉及向物体发射激光并让激光从物体上反射,但激光有时似乎会穿过物体。我注意到第二次光线投射将在场景的原点结束,而不是从对象反射,即使这意味着穿过对象。
这是我的意思的图片: 有时它会从物体反射,但仍然穿过原点。

这是我迄今为止反映的代码:

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,但这也不起作用。我也尝试过使用射线并将方向设置为与射线方向相反,但这不起作用。

c# unity-game-engine 2d raycasting
1个回答
0
投票

肯定有更精致的方法,但我就是这样做的。你需要知道如何绘制射线。反射点和反射角。您可以从源中拍摄另外两个角度变化较小的光线投射,通过简单的几何形状,您可以找到目标表面的角度。 所以分步骤 1-进行光线投射并获取击中点的位置

2- 在两个方向上再进行两次大约一度的光线投射,并获取每个方向的距离

3-使用这 2 个数字来使用余弦计算角度。(您正在制作一个具有角度和两条边的三角形)

4-最终根据第一步得到的点和第三步得到的角度创建铸件

© www.soinside.com 2019 - 2024. All rights reserved.