二维线渲染器反射问题 - Unity

2D line renderer reflection issue - Unity

我在一个特定的对象标签上制作了一个二维线渲染器反射,它在工作,但只在左侧工作,而在右侧没有显示反射,我不知道为什么,因为当我的脚本是在 3d 上它工作正常。

这是我从 3D 转换成 2D 的脚本。

    public int reflections;
    public float maxLength;

    private LineRenderer lineRenderer;
    public LayerMask layerMask;
    private Ray2D ray;
    private RaycastHit2D hit;

    private void Awake()
    {
        lineRenderer = GetComponent<LineRenderer>();
    }

    private void Update()
    {
        ray = new Ray2D(transform.position, transform.up);

        lineRenderer.positionCount = 1;
        lineRenderer.SetPosition(0, transform.position);
        float remainingLength = maxLength;

        for (int i = 0; i < reflections; i++)
        {
            hit = Physics2D.Raycast(ray.origin, ray.direction, remainingLength, layerMask);

            if (hit)
            {
                lineRenderer.positionCount += 1;
                lineRenderer.SetPosition(lineRenderer.positionCount - 1, hit.point);
                remainingLength -= Vector2.Distance(ray.origin, hit.point);
                ray = new Ray2D(hit.point, Vector2.Reflect(ray.direction, hit.normal));
                if (hit.collider.tag != "Reflect")
                    break;
            }
            else
            {
                lineRenderer.positionCount += 1;
                lineRenderer.SetPosition(lineRenderer.positionCount - 1, ray.origin + ray.direction * remainingLength);
            }
        }
    }

预览

向右走时

向左走时

有时也会闪烁,我不知道这是怎么回事,我以为是因为订单层我已经改变了这个但是没有任何反应。

关于闪烁,这是由于碰撞对象和线条本身的剪裁问题造成的。

条件内部:

if (hit)

调整代码如下:

// Get the reflected vector of the raycast.
Vector2 updatedDirection = Vector2.Reflect(ray.direction, hit.normal);
                    
// Create new Ray object & set origin to be 0.01f away from hitpoint so the line is not colliding with the gameobject collider.
ray = new Ray2D(hit.point + updatedDirection * 0.01f, updatedDirection);

您可以从这些链接中了解更多信息:

https://answers.unity.com/questions/1602542/line-renderer-flickering-when-updated-in-runtime.html

https://answers.unity.com/questions/1690411/help-with-reflecting-in-2d.html?childToView=1690554#comment-1690554

至于线没有反映在右墙上的原因,这很可能是由于游戏对象标签没有设置为“反映”。当与带有该标签的对象发生碰撞时,您只会创建一条新的反射线。仔细检查右墙游戏对象是否在检查器中设置了标签“Reflect”。