Как мне сохранить все сгенерированные линии на экране - PullRequest
0 голосов
/ 27 мая 2020

У меня есть два движущихся объекта, и я хочу соединить их несколькими линиями. Линии будут нарисованы, но исчезнут при создании новой.

Как я могу сохранить все сгенерированные линии?

void CreateLine()
{
    line = new GameObject("Line" + currLines).AddComponent<LineRenderer>();
    line = GetComponent<LineRenderer>();
    line.SetPosition(0, Pos1);
    line.SetPosition(1, Pos2);
    line.startColor = Color.white;
    line.endColor = Color.white;
    line.startWidth = 5;
    line.endWidth = 5;
    line.positionCount = 2;
    line.sortingOrder = 2;
    line.useWorldSpace = true;
    currLines++;
}

void Start()
{
    Pos1 = GameObject.FindGameObjectWithTag("Pos1");
    Pos2 = GameObject.FindGameObjectWithTag("Pos2");

    InvokeRepeating("CreateLine", 0, 0.05f);
}

1 Ответ

1 голос
/ 27 мая 2020

Используйте этот код:

public class LinesCreator : MonoBehaviour
{
   LineRenderer line;
   GameObject Pos1, Pos2;
   int currLines=0;

   Vector3 pos1, pos2;

   void CreateLine()
   {
       // To avoid creating multiple lines in the same positions.
       if (Pos1.transform.position == pos1 && Pos2.transform.position == pos2)
        return;

    line = new GameObject("Line" + currLines).AddComponent<LineRenderer>();
    //line = GetComponent<LineRenderer>(); // This will return the GameObject's line renerer, not the new GameObject's line rendere

       pos1 = Pos1.transform.position;
       pos2 = Pos2.transform.position;
       line.SetPosition(0, pos1);
       line.SetPosition(1, pos2);
       line.startColor = Color.white;
       line.endColor = Color.white;
       line.startWidth = 0.7f;
       line.endWidth = 0.7f;
       line.positionCount = 2;
       line.sortingOrder = 2;
       line.useWorldSpace = true;
       currLines++;
   }

   void Start()
   {
       Pos1 = GameObject.FindGameObjectWithTag("Pos1");
       Pos2 = GameObject.FindGameObjectWithTag("Pos2");

       InvokeRepeating("CreateLine", 0, 0.05f);
   }
}

Внесенные мной изменения:

Прежде всего, чтобы программа работала так, как вы хотите, нужно удалить line = GetComponent ( ); (я закомментировал это).

Эта строка устанавливает line в lineRenderer gameObject (gameObject, на котором есть скрипт).

Нам этого не нужно, потому что мы хотим, чтобы строка была в новом gameObject.

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

Я сделал это путем сравнения последней позиции и текущей позиции, если они оба (объекты) не двигались - вам не нужно рисовать новую линию.

...