Debug.DrawLine没有显示在GameView中

时间:2017-03-15 19:31:53

标签: c# unity3d unity5

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

这段代码很好用。

Debug.DrawLine(button1.transform.position, button2.transform.position, Color.green);

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

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

Physics2D.Linecast(button1.transform.position, button2.transform.position);

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

知道我该怎么解决这个问题?

2 个答案:

答案 0 :(得分:4)

只是行Serlite说,Physics2D.Linecast不是用于绘制线,而是用于检测两个对象中间是否有一个带有光线投射的对象。它与绘制线无关。

如您所知,Debug.DrawLine只能在场景视图中使用,除非启用了Gizmos。您可以只使用LineRendererGL函数来绘制可在不启用Gizmo的情况下工作的行,并且还可以在构建中工作。

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

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);
        }
    }
}

<强>用法

LineDrawer lineDrawer;

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

void Update()
{
    lineDrawer.DrawLineInGameView(Vector3.zero, new Vector3(0, 40, 0f), Color.blue);
}

完成后,您可以拨打lineDrawer.Destroy();

答案 1 :(得分:1)

Debug.DrawLine将一个线条Gizmo渲染到场景视图中。

如果您想要在游戏视图中渲染一条线,请使用线条渲染器组件。

Line Renderer Docs