Debug.DrawLine 未显示在 GameView 中

Ben*_*ney 6 c# unity-game-engine unity5

我正在开发 2D Unity 应用程序,但遇到了一些奇怪的行为。

这段代码工作得很好。

Debug.DrawLine(button1.transform.position, button2.transform.position, Color.green);
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,我在场景视图中看到一条绿线。

但是当我有以下行时,游戏视图中没有任何显示。

Physics2D.Linecast(button1.transform.position, button2.transform.position);
Run Code Online (Sandbox Code Playgroud)

我对 Unity 如何能够在这两个按钮之间画一条线感到困惑,但出于某种原因,它只是不在游戏视图中这样做。

知道如何解决这个问题吗?

Pro*_*mer 9

只是 line Serlite说的,Physics2D.Linecast不是用来画线的,而是用raycast检测两个物体中间是否有物体。它与绘制线条无关。

如您所知,Debug.DrawLine除非启用 Gizmos ,否则只能在场景视图中工作。您可以仅使用LineRendererGL绘制线条的功能,这些功能无需启用 Gizmos 即可工作,也可以在构建中工作。

这是用于在游戏和场景视图中绘制线条的辅助类。

public struct LineDrawer
{
    private LineRenderer lineRenderer;
    private float lineSize;

    public LineDrawer(float lineSize = 0.2f)
    {
        GameObject lineObj = new GameObject("LineObj");
        lineRenderer = lineObj.AddComponent<LineRenderer>();
        //Particles/Additive
        lineRenderer.material = new Material(Shader.Find("Hidden/Internal-Colored"));

        this.lineSize = lineSize;
    }

    private void init(float lineSize = 0.2f)
    {
        if (lineRenderer == null)
        {
            GameObject lineObj = new GameObject("LineObj");
            lineRenderer = lineObj.AddComponent<LineRenderer>();
            //Particles/Additive
            lineRenderer.material = new Material(Shader.Find("Hidden/Internal-Colored"));

            this.lineSize = lineSize;
        }
    }

    //Draws lines through the provided vertices
    public void DrawLineInGameView(Vector3 start, Vector3 end, Color color)
    {
        if (lineRenderer == null)
        {
            init(0.2f);
        }

        //Set color
        lineRenderer.startColor = color;
        lineRenderer.endColor = color;

        //Set width
        lineRenderer.startWidth = lineSize;
        lineRenderer.endWidth = lineSize;

        //Set line count which is 2
        lineRenderer.positionCount = 2;

        //Set the postion of both two lines
        lineRenderer.SetPosition(0, start);
        lineRenderer.SetPosition(1, end);
    }

    public void Destroy()
    {
        if (lineRenderer != null)
        {
            UnityEngine.Object.Destroy(lineRenderer.gameObject);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法

LineDrawer lineDrawer;

void Start()
{
    lineDrawer = new LineDrawer();
}

void Update()
{
    lineDrawer.DrawLineInGameView(Vector3.zero, new Vector3(0, 40, 0f), Color.blue);
}
Run Code Online (Sandbox Code Playgroud)

完成后,您可以调用lineDrawer.Destroy();.


Ero*_*lun 1

Debug.DrawLine 将线小控件渲染到场景视图中。

如果您希望将线条渲染到游戏视图中,请使用线条渲染器组件。

线渲染器文档