Не получается удочерить GameObject к Panel, что делать?

183
10 апреля 2019, 13:30

При нажатие на [GameObject] в моём случае им является [Button], нужно удалить это [GameObject] и заспавнить новый [GameObject] с чем мой скрипт успешно справляется, проблема в том что новый созданный [GameObject] не удочерить к [Panel], помогите пожалуйста с этим разобраться!

Внимание: всё что закоменчено не работает.

public GameObject virus1; // Prefab
//public GameObject panel; // Panel
public void Destroy()
{
    Destroy(gameObject);
    Instantiate (virus1, new Vector3(Random.Range(-300f, 300f), Random.Range(-600f, 600f), 0f), Quaternion.identity); // деапозон спавна
    // GameObject childObject = Instantiate (virus1, new Vector3(Random.Range(-300f, 300f), Random.Range(-600f, 600f), 0f), Quaternion.identity); // деапозон спавна
    // childObject.transform.SetParent(panel.transform, false); // родитель
}

Внимание: на скриншоте наглядно показано где спавнится объект.

Answer 1

Задаешь родителя у обьекта через трансформ:

SomeButton.transform.SetParent(panel.transform, false);

Это работает. Но....

Если уж ты вызываешь Destroy(gameObject); то у тебя уничтожается обьект с даным скриптом. И, по-факту код что идет дальше может и не выполнится.

Уверен, если бы ты отдебажил код, то ты бы это увидел. То есть закоменченный тобою метод не работает потому... что он банально не выполнялся ни разу. Ты там хоть что пиши, оно выполнится не должно. :)

Попробуй перенести Destroy(gameObject); в самый конец метода и тогда этот закоменченный тобою код будет работать.

То есть должно быть как-то так:

public GameObject virus1; // Prefab //проследи что бы был заасайнен префаб
private GameObject panel; // Panel
// Use this for initialization
void Start()
{
    panel = GameObject.Find("panelr");//проследи что бы это имя было ПРАВИЛЬНО указано
}
public void Destroy()
{
    GameObject childObject = Instantiate (virus1, new Vector3(0f, 0f, 0f), Quaternion.identity);
    childObject.transform.SetParent(panel.transform, false);
    childObject.transform.position = new Vector3(Random.Range(-300f, 300f), Random.Range(-600f, 600f), 0f);//парент уже задан и теперь уже нужно задавать позицию, ПОСЛЕ того как задан парент
    Destroy(gameObject);
}
Answer 2

Большое вам спасибо что помогли решить мою проблему, Destroy(gameObject); его перемещение не сыграло не какую роль но я всё равно прислушался вашего мнение так как в дальнейшем из за этого могут возникнуть ошибки,код переписал таким образом всё работает что то было лишние в вашем совете но всё же я добился нужного мне результата:

public GameObject virus1; // Prefab
private GameObject panel; // Panel
// Use this for initialization
void Start()
{
    panel = GameObject.Find("VirusEvolution"); // Panel которая является родителем
}
public void Evolution()
{
    GameObject childObject = Instantiate(virus1, new Vector3(Random.Range(-300f, 300f), Random.Range(-600f, 600f), 0f), Quaternion.identity); // деапозон спавна
    childObject.transform.SetParent(panel.transform, false);
    Destroy(gameObject); // удаление virus
}

Вам ставлю галочку, ещё раз благодарю за помощь !!!

[Flipsizze]

READ ALSO
C# много POST запросов в цикле

C# много POST запросов в цикле

Необходимо выполнить очень много POST запросов на сайт, получить ответ (типо "1,2,3" добавить в массив и отправить запросы на другой URL

188
C# WPF Как добавить attached контрол в свой User Control?

C# WPF Как добавить attached контрол в свой User Control?

Есть свой User ControlКак вложить в него например TextBlock как ето сделано в ScrollViewer?

161
Скриншот всех nodes

Скриншот всех nodes

Есть ссылка на сайтНеобходимо получить selector или xpath для всех доступных элементов

182
Какую использовать базу данных для “windows form”? [закрыт]

Какую использовать базу данных для “windows form”? [закрыт]

Приложение устанавливаться не будетНужна небольшая бд

168