簡體   English   中英

如何將所有 linerenderer 測試 function 放在游戲對象父級下?

[英]How can I put all the linerenderer test function under a gameobject parent?

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 時,它都會創建一個新的零游戲對象子對象,並且新子對象的 position 會有所不同。

我想這就是你要找的。

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM