Как я могу поместить всю тестовую функцию linerenderer под родительским объектом gameobject? - PullRequest
0 голосов
/ 03 апреля 2020
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DrawLines : MonoBehaviour
{
    public LineRenderer lineRenderer;
    public GameObject dotPrefab;
    public string numbers;

    private Vector3[] Positions;

    // Start is called before the first frame update
    void Start()
    {
        DrawNumber(0);
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetKeyDown("0"))
        {
            DrawNumber(0);
            numbers = "0";
        }
    }

    void DrawNumber(int number)
    {
        if (number == 0)
        {
            Zero();
        }
    }

    private void Zero()
    {
        Positions = new Vector3[7] { new Vector3(0, 0, 0),
            new Vector3(1, 0, 0),
            new Vector3(1, -1, 0),
        new Vector3(1,-2,0),
        new Vector3(0,-2,0),
        new Vector3(0,-1,0),
        new Vector3(0,0,0)};

        lineRenderer.positionCount = 7;
        lineRenderer.SetPositions(Positions);

        for (int i = 0; i < Positions.Length; i++)
        {
            var dot = Instantiate(dotPrefab);
            dot.transform.position = Positions[i];
        }
    }
}

Каждый раз, когда я нажимаю на клавишу 0, создается еще один ноль, но первая проблема заключается в том, что новый ноль находится в тех же позициях, что и первый ноль, поэтому я хочу, чтобы все нули находились под родителем, поэтому каждый раз Я нажимаю на 0, это создаст нового дочернего объекта Zero gameobject, а также новый дочерний объект будет в несколько ином положении.

1 Ответ

2 голосов
/ 03 апреля 2020

Я думаю, это то, что вы ищете.

private const float LETTER_WIDTH = 2f;

public LineRenderer lineRenderer;
public GameObject dotPrefab;
public string numbers;
public Transform WordAnchor;//parent object to set all the letters under

private int currentLetterIndex = 0;
private Vector3[] Positions;

// Start is called before the first frame update
void Start()
{
    DrawNumber(0);
}

// Update is called once per frame
void Update()
{
    if(Input.GetKeyDown("0"))
    {
        DrawNumber(0);
        numbers = "0";
    }
}

void DrawNumber(int number)
{
    if (number == 0)
    {
        Zero();
    }
}

private void Zero()
{
    Positions = new Vector3[7] { new Vector3(0, 0, 0),
    new Vector3(1, 0, 0),
    new Vector3(1, -1, 0),
    new Vector3(1,-2,0),
    new Vector3(0,-2,0),
    new Vector3(0,-1,0),
    new Vector3(0,0,0)};
    //Create a gameobject to parent the dots under
    GameObject letter = new GameObject(currentLetterIndex.ToString() );
    letter.transform.parent = WordAnchor;//parent the letter under the word
    letter.transform.localPosition = new Vector3(currentLetterIndex * LETTER_WIDTH, 0f, 0f);//move an offset base on the index


    LineRenderer lineRendererInstance = letter.AddComponent<LineRenderer>();
    lineRendererInstance.positionCount = 7;
    lineRendererInstance.SetPositions(Positions);
    lineRendererInstance.useWorldSpace = false;
    for (int i = 0; i < Positions.Length; i++)
    {
        var dot = Instantiate(dotPrefab, letter.transform);//parent the dot under the letter.
        dot.transform.localPosition = Positions[i];//set the relative position.
    }
    ++currentLetterIndex;
}

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