Как я могу убедиться, что текст не будет написан дважды с одним и тем же значением? - PullRequest
0 голосов
/ 01 августа 2020
using UnityEngine;

public class Draws : MonoBehaviour
{
    public LineRenderer lineRenderer;
    public string text;

    private Vector3[] positions;
    private string oldText;

    private void Start()
    {
        if (lineRenderer == null)
        {
            lineRenderer = GetComponent<LineRenderer>();

            lineRenderer.startWidth = 0.3f;
            lineRenderer.endWidth = 0.3f;
        }

        // 0,  0, 0
        // 5,  0, 0
        // 5, -5, 0
        // 0, -5, 0

        positions = new Vector3[5] { new Vector3(0, 0, 0), new Vector3(5, 0, 0),
            new Vector3(5, -5, 0), new Vector3(0, -5, 0), new Vector3(0, 0, 0)};
        DrawLine(positions, Color.red, 0.2f);
    }

    void DrawLine(Vector3[] positions, Color color, float duration = 0.2f)
    {
        GameObject myLine = new GameObject();

        myLine.transform.position = positions[0];
        myLine.AddComponent<LineRenderer>();
        LineRenderer lr = myLine.GetComponent<LineRenderer>();
        lr.positionCount = positions.Length;
        lr.startColor = color;
        lr.endColor = color;
        lr.startWidth = 0.1f;
        lr.endWidth = 0.1f;
        lr.useWorldSpace = false;
        lr.SetPositions(positions);
    }

    void DrawText()
    {
        for (int i = 0; i < positions.Length; i++)
        {
            if (oldText != text)
            {
                var pos = Camera.main.WorldToScreenPoint(positions[i]);
                text = positions[i].ToString();
                var textSize = GUI.skin.label.CalcSize(new GUIContent(text));
                GUI.contentColor = Color.red;
                GUI.Label(new Rect(pos.x, Screen.height - pos.y, textSize.x, textSize.y), text);
                GUI.contentColor = Color.green;
                GUI.Label(new Rect(pos.x, Screen.height - pos.y - 20, textSize.x, textSize.y), i.ToString());
            }
        }
    }

    private void OnGUI()
    {
        if (positions != null)
        {
            if (positions.Length > 0)
            {
                DrawText();
            }
        }
    }
}

В методе DrawText я использую метку gui для отображения строки на каждых двух строках, совпадающих с положением угла. Например, при 0,0,0

В конце, когда квадрат закрыт, первая позиция и последняя - 0,0,0, поэтому я хочу избежать отображения одного и того же текста позиции красным и зеленым.

Я добавил еще одну текстовую переменную, назвав ее oldText, но не знаю, как ее использовать больше. Сейчас я проверяю, если oldText! = Text, но поскольку oldText все время пуст, он всегда будет верным.

Пример снимка экрана:

Квадрат с текстами красного и зеленого цветов

1 Ответ

0 голосов
/ 01 августа 2020

Использование List<Vector3> может быть здесь полезным. Вы можете добавить все vector3, которые уже отображаются, и проверить, когда вы начнете настраивать другой GUI.Label(), вы можете проверить Vector3, которые уже отображаются.

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

public Vector3[] positions;
public string text;
public List<Vector3> drawnPositions;

private void OnGUI()
{
    DrawText();
}

public void DrawText()
{
    //Clearing the list
    drawnPositions.Clear();

    //Your Text Drawing Loop
    for (int i = 0; i < positions.Length; i++)
    {
        //Condition to find that weather the Vector3 object is already drawn or not
        if (drawnPositions.FindIndex(x => x == positions[i]) < 0)
        {
            //If the condition is true and position is being displaied then add that Vector3 to list.
            drawnPositions.Add(positions[i]);

            //Your reguler code
            var pos = Camera.main.WorldToScreenPoint(positions[i]);
            text = positions[i].ToString();
            var textSize = GUI.skin.label.CalcSize(new GUIContent(text));
            GUI.contentColor = Color.red;
            GUI.Label(new Rect(pos.x, Screen.height - pos.y, textSize.x, textSize.y), text);
            GUI.contentColor = Color.green;
            GUI.Label(new Rect(pos.x, Screen.height - pos.y - 20, textSize.x, textSize.y), i.ToString());
        }
    }
}

Ссылки

List.FindIndex ()

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