Как нарисовать линию на холсте сверху вниз по экрану? - PullRequest
0 голосов
/ 06 января 2019

Я хочу добавить в свою игру линию, разделяющую левый и правый регионы. Я добавил 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 добавлен в gameObject с требуемыми цветами и шириной, но линия не прорисована.

Что я делаю не так?

enter image description here

Спасибо

enter image description here

enter image description here

1 Ответ

0 голосов
/ 06 января 2019

Только что протестировал код, который вы разместили, и он работает нормально. Первоначально я думал, что линия рисуется слишком тонкой, и собирался рекомендовать изменить ее размер, чтобы она была больше в начальной и конечной точках, но после тестирования я вижу, что линия рисуется в редакторе и игре.

Here's an image of it being drawn in engine

Если компонент LineRenderer создается, и вы не можете видеть строку ни в редакторе, ни в представлении игры, то опубликуйте изображение инспектора для игрового объекта, в котором во время выполнения находится компонент LineRenderer.


Ответ на ваши комментарии

Использование LineRenderer рисует линию во время выполнения в 3D-пространстве на основе позиций, выбранных в вашем коде при выполнении вызовов SetPosition.

Говоря о Canvas, я предполагаю, что вы говорите о UI Canvas .

LineRenderer рисует на основе заданных вами позиций, а не на основе Canvas, если вы не запрограммируете его таким образом.

Итак, если ваша камера не расположена в месте, где можно видеть линию перед ней, она не будет отображаться в game view.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...