代码之家  ›  专栏  ›  技术社区  ›  wax_lyrical

单位矢量光线投射调试

  •  0
  • wax_lyrical  · 技术社区  · 6 年前

    我正试着把我的光线投射画成二维的

    RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector3.down, 2f, layerMask);
            Debug.DrawRay(transform.position, (transform.position + new Vector3(transform.position.x, transform.position.y+250, transform.position.z)), Color.green);
            Debug.DrawLine(transform.position, (transform.position + new Vector3(transform.position.x, transform.position.y+250, transform.position.z)), Color.magenta);
            Debug.DrawLine(transform.position, (transform.position + new Vector3(hit.normal.x, hit.normal.y, -10)), Color.magenta);
            Debug.DrawLine(transform.position, (transform.position + new Vector3(hit.normal.x, hit.normal.y, 10)), Color.magenta);
    

    光线投射正在工作,但我想看看。现在我什么也没看到。我本以为我只需要原始的三维矢量变换+一个位移。但似乎什么都不管用。

    1 回复  |  直到 6 年前
        1
  •  1
  •   AnLog    6 年前

    如果不给它一个持续时间,我很肯定 Debug.DrawRay 仅持续一帧 . 所以要么试着给它一个持续时间:

    Debug.DrawRay(transform.position, (transform.position + new Vector3(transform.position.x, transform.position.y+250, transform.position.z)), Color.green, 2.0f);
    

    或者在更新或绘图小控件中绘制:

    private void OnDrawGizmos()
    {
        Debug.DrawRay(transform.position, (transform.position + new Vector3(transform.position.x, transform.position.y + 250, transform.position.z)), Color.green);
    }
    

    上面的代码呈现了每一帧都可见的绿线。基本上就是你所期望的。

    无论如何,使用OnDrawGizmos,但是使用OnDrawGizmos的好处是可以将调试代码与其他代码巧妙地分开,所以我倾向于使用这种解决方案。