如何在Canvas上从屏幕顶部到底部画一条线?

时间:2019-01-06 16:09:02

标签: c# unity3d

我想在游戏中添加一条线,将左右区域分开。我将一个Gameobject添加到了Canvas中,并添加了以下脚本:

public class DrawLine : MonoBehaviour
{
    public Color c1 = Color.red;
    public Color c2 = Color.white;
    Vector3 topPoint;
    Vector3 bottomPoint;

    // Start is called before the first frame update
    void Start()
    {
        topPoint = new Vector3(Screen.width / 4, Screen.height);
        bottomPoint = new Vector3(Screen.width / 4, 0);
        LineRenderer lineRenderer = gameObject.AddComponent<LineRenderer>();
        lineRenderer.material = new Material(Shader.Find("Sprites/Default"));
        lineRenderer.widthMultiplier = 2.2f;
        lineRenderer.positionCount = 40;

        // A simple 2 color gradient with a fixed alpha of 1.0f.
        float alpha = 1.0f;
        Gradient gradient = new Gradient();
        gradient.SetKeys(
            new GradientColorKey[] { new GradientColorKey(c1, 0.0f), new GradientColorKey(c2, 1.0f) },
            new GradientAlphaKey[] { new GradientAlphaKey(alpha, 0.0f), new GradientAlphaKey(alpha, 1.0f) }
        );
        lineRenderer.colorGradient = gradient;

        lineRenderer.SetPosition(0, topPoint);
        lineRenderer.SetPosition(1, bottomPoint);
    }


}

运行游戏时。将LineRenderer以所需的颜色和宽度添加到游戏对象,但未绘制任何线条。

我在做什么错了?

enter image description here

谢谢

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

只需测试您发布的代码,它就可以正常工作。我原本以为线条绘制得太细了,建议将线条的大小调整为在起点和终点处更大,但是经过测试,我确实看到了在编辑器和游戏中绘制的线条。

Here's an image of it being drawn in engine

如果正在创建bindValue组件,但您既看不到编辑器视图也不是游戏视图,请在运行时发布具有LineRenderer组件的游戏对象的检查器图像


回复您的评论

使用LineRenderer会在执行LineRenderer调用时根据代码中选择的位置在3D-Space中在运行时绘制一条线。

在谈论SetPosition时,我假设您是在谈论 UI画布

LineRenderer会根据您设置的位置进行绘制,而不是基于Canvas进行绘制,除非您以此方式进行编程。

因此,如果您的相机未放置在可以看到其前面的线的位置,那么它将不会显示在Canvas中。

Here's an image show how I have my camera set up to see the line