Как я могу добавить в качестве ребенка к родителю каждую группу лестниц к ее правильному родителю? - PullRequest
0 голосов
/ 20 ноября 2018

В первом сценарии:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GenerateStairsUnits : MonoBehaviour
{
    [Header("Stairs Units Prefab")]
    public GameObject stairsUnitsPrefab;
    [Space(5)]
    [Header("Settings")]
    [Range(1, 20)]
    public int numberOfUnits = 1;
    public static GameObject Unit;

    private int oldNumberOfUnits = 0;

    // Use this for initialization
    void Start ()
    {
        oldNumberOfUnits = numberOfUnits;

        var unitsParent = GameObject.Find("Stairs Units");
        for (int i = 0; i < numberOfUnits; i++)
        {
            Unit = Instantiate(stairsUnitsPrefab, unitsParent.transform);
            Unit.name = "Stairs " + i.ToString();
        }
    }

    // Update is called once per frame
    void Update ()
    {

    }
}

Итак, теперь в разделе «Лестницы» у меня есть, например, 5 лестниц (Лестница 0, Лестница 1, Лестница 2, Лестница 3, Лестница 4), которые являются копией этогосценарий:

using System.Collections;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;

public class GenerateStairs : MonoBehaviour
{
    [Header("Stairs Prefb")]
    public GameObject stairsPrefab;
    [Space(5)]
    [Header("Platforms")]
    public bool addPlatforms = false;
    public GameObject platformsPrefab;
    [Space(5)]
    [Header("Settings")]
    public float delay = 3;
    public int stairsNumber = 5;
    public Vector3 stairsStartPosition;
    public Vector3 stairSize;
    public Vector3 stairsSize;
    public float stepWidthFactor = 1f;

    private Vector3 stairsPosition;
    private GameObject stairsParent;

    // Use this for initialization
    void Start()
    {
        stairsParent = new GameObject();
        stairsParent.name = "Stairs";
        stairsParent.transform.parent = GenerateStairsUnits.Unit.transform;
        StartCoroutine(BuildStairs());
    }

    // Update is called once per frame
    void Update()
    {

    }

    private IEnumerator BuildStairs()
    {
        for (int i = 1; i <= stairsNumber; i++)
        {

            stairsPosition = new Vector3(
                    stairsStartPosition.x,
                    stairsStartPosition.y + (i * stairsSize.y),
                    stairsStartPosition.z + (i * stairsSize.y) * stepWidthFactor);

            GameObject stair = Instantiate(
                    stairsPrefab,
                    stairsPosition,
                    Quaternion.identity);

            stair.tag = "Stair";
            stair.transform.parent = stairsParent.transform;
            stair.transform.localScale = stairSize;

            yield return new WaitForSeconds(delay);
        }

        stairsParent.AddComponent<MoveObjects>().Init();
    }
}

Теперь на втором сценарии «Лестницы» я хочу быть дочерним элементом каждой ступени лестницы: например, под Лестницей 0 должны быть Лестницы.Тогда под Лестницей 1 должны быть также Лестницы, а также под Лестницей 2 и Лестницей 3 и Лестницей 4.

Но, как я пытался это сделать:

stairsParent.transform.parent = GenerateStairsUnits.Unit.transform;

Не ставьте каждыйЛестница под Лестницы 0,1,2,3,4

1 Ответ

0 голосов
/ 20 ноября 2018

Итак, я вижу, как вы создаете 5 лестниц, каждая из которых содержит класс, который создает больше лестниц.Другими словами, Лестница # - это преобразование, в которое нужно преобразовать другую лестницу.Вы устанавливаете другую лестницу в настоящее время как Лестничную единицу, и все, что вам нужно сделать, это преобразование # Лестницы без .parent.Также в начале удалите.Быстрый макет «Лестничный блок / Лестница # <--- transform.parent» установит другую лестницу на «Лестничный блок», и я думаю, что вы ищите «Лестничный блок / Лестница # / больше», надеюсь, это поможет с небольшим визуальным эффектом. </p>

stairsParent.transform.parent = GenerateStairsUnits.Unit.transform;

затем

private IEnumerator BuildStairs()
{
    for (int i = 1; i <= stairsNumber; i++)
    {

        stairsPosition = new Vector3(
                stairsStartPosition.x,
                stairsStartPosition.y + (i * stairsSize.y),
                stairsStartPosition.z + (i * stairsSize.y) * stepWidthFactor);

        GameObject stair = Instantiate(
                stairsPrefab,
                stairsPosition,
                Quaternion.identity);

        stair.tag = "Stair";
        stair.SetParent(transform);//just use this transform I believe this would be Stairs#
        stair.transform.localScale = stairSize;

        yield return new WaitForSeconds(delay);
    }

    stairsParent.AddComponent<MoveObjects>().Init();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...