Unity-C # Instantiate не работает - PullRequest
0 голосов
/ 28 апреля 2018

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

Код здесь:

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

public class instantiateObject: MonoBehaviour {

    public int topSayi;
    public Transform prefab;
    void Start () {
        for(int a = 0; a < topSayi; a++)
        {
            prefab.localPosition = new Vector3(0, a * -0.5f, 5);
            Instantiate(prefab);
        }
    }


}

это создает непрерывный объект

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Редакция 1:

Наличие сценария на префабе, который создает копию того же самого префаба в Start() или Awake(), является функциональным эквивалентом создания бесконечной рекурсии. Всякий раз, когда создается экземпляр префаба, он (почти) сразу же создает еще одну копию до бесконечности. Проще говоря, не делай этого! Иметь какой-нибудь другой объект типа менеджера для создания экземпляра.


Оригинал:

Вы не создаете экземпляры преобразований, вы создаете экземпляры GameObjects:

public GameObject prefab;

Во-вторых, вы должны установить положение ПОСЛЕ или, предпочтительно, во время создания экземпляра:

var go = Instantiate(prefab, position);

И, наконец, как заметил @ JackMini36, условие для вашего цикла for (edit: was) искажено:

for(int a = 0; a < numSayi; a++)
0 голосов
/ 28 апреля 2018

Похоже, что это не входит в цикл for. Я думаю, topSayi - это время, когда вы хотите создать экземпляр, поэтому вы неправильно написали оператор for. Должно быть так:

for(int a = 0; a < topSayi; a++)
{
    prefab.localPosition = new Vector3(0, a * -0.5f, 5);
    Instantiate(prefab);
}

Вы проверяли, больше ли a, чем topSayi, что никогда не будет иметь место. поэтому он никогда не пойдет внутрь для утверждения. Должно быть, наоборот.

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