103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
1

Удалить все объекты и создать объекты - потомки

09.04.2016, 18:34. Показов 10122. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как сделать клоны объекта в другом объекте?
Использую метод Instantiate
Есть метод

C#
1
2
3
4
5
6
7
8
9
10
11
12
public Transform Elem; //элемент на плоскости
public Transform Plane; //плоскость
...
void Method{
            Plate.transform.localScale = new Vector3(plane.Width, plane.Height, 1); //plane и elem - объекты других классов
            Instantiate(Plane, new Vector3(0, 0, 2), Quaternion.identity);
            for (int i = 0; i < N; i++)
            {
                Elem.transform.localScale = new Vector3(elem[i].Width, elem[i].Height, 1);
                Instantiate(Elem, new Vector3(Input.km[i].x, Input.km[i].y, 1), Quaternion.identity);
            }
}
Как сделать так, чтобы элементы были дочерними к плоскости и при каждом вызове метода уничтожались перед созданием?
И небольшой оффтоп, почему всегда после перезапуска юнити в редакторе включается режим 2д?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2016, 18:34
Ответы с готовыми решениями:

Удалить все объекты в списке
Доброго времени суток, у меня есть лист, который заполнен объектами, и нужно их удалить. Вот мой...

Возможно ли объекты и потомки этих объектов поместить в один и тот же динамический массив?
У меня есть объекты, очень сложные объекты. Они постоянно относятся то одному то другому массива,...

Как удалить все объекты из памяти?
Есть программа код которой выполняется в потоке (Ttread). Программа &quot;состоит&quot; из 10 двумерных...

Как последовательно удалить все объекты класса
Есть вот такой класс #define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;string&gt;...

4
3 / 3 / 4
Регистрация: 21.07.2015
Сообщений: 51
09.04.2016, 22:34 2
Лучший ответ Сообщение было отмечено Quat1111 как решение

Решение

Попробуйте так:
C#
1
2
3
4
5
6
7
8
9
10
11
    
//Удаляем дочерние объекты
        Transform Plane;
        int n = Plane.childCount;
        for (int i = 0; i < n; i++) {
            Destroy (Plane.GetChild (i).gameObject);
        }
//Устанавливаем родителя 
        Transform Elem;
        Elem = Instantiate (Elem, new Vector3 (Input.km [i].x, Input.km [i].y, 1), Quaternion.identity);
        Elem.SetParent (Plane);
Если у вас по умолчанию стоит режим 2D, значит вы создавали проект в 2D режиме. Зайдите в Edit->Project settings -> Editor и поставьте опцию Default Behavior mode на 3D. Должно помочь.
1
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
10.04.2016, 02:51  [ТС] 3
Цитата Сообщение от Prizrak9 Посмотреть сообщение
Зайдите в Edit->Project settings -> Editor и поставьте опцию Default Behavior mode на 3D.
Было 3D, проект создавал тоже в 3D, что то слетело видимо.

Включил 2D, потом 3D и помогло, спасибо.

Для поисковиков: почему по умолчанию включается режим 2d в редакторе unity unity3d.

Добавлено через 24 минуты
C#
1
Elem.SetParent (Plane);
На это ругается

Setting the parent of a transform which resides in a prefab is disabled to prevent data corruption.
UnityEngine.Transform:SetParent(Transform)

Добавлено через 1 час 29 минут
Нужно создать объект, в котором хранить копию префаба, в этом была ошибка. Разобрался.

Добавлено через 39 минут
Как можно удалить Plane?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public Transform Plane_prefab;
            Transform Plane;
...
void Method{
...
            Destroy(Plane);
            Plane= Instantiate(Plane_prefab, new Vector3(0, 0, 2), Quaternion.identity) as Transform;
            Plane.transform.localScale = new Vector3(PP.Width, PP.Height, 1);
 
  for (int i = 0; i < Input.N; i++)
            {
                Elem = Instantiate(Elem_prefab) as Transform;
                ...
                Elem.parent = Plane;
            }
...
}
При каждом вызове метода создается новый экземпляр, а старый не удаляется. Нужно чтобы оставался только один экземпляр Plane c дочерними объектами.
0
3 / 3 / 4
Регистрация: 21.07.2015
Сообщений: 51
10.04.2016, 07:30 4
метод Destroy() удаляет обьекты типа GameObject. Как вы ищете сам экземпляр Plane? Если у вас Transform Plane то используйте Destroy(Plane.gameObject).
1
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
10.04.2016, 11:51  [ТС] 5
Prizrak9, сделал вот так в начале метода, все работает, спасибо
C#
1
2
if (Plane != null)
            Destroy(Plane.gameObject);
0
10.04.2016, 11:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2016, 11:51
Помогаю со студенческими работами здесь

Удалить все объекты, которые находятся в классе
Привет! Есть класс Element и стек объектов данного класса. Нужно удалить все объекты, которые...

динамически создать/удалить объекты класса (правильно сделал?)
создал класс: myclass { } завел вектор, в котором будут храниться указатели на объекты данного...

Удалить все объекты у которых переменная равна false
Добрый день, форумчане. Вопрос связанный с памятью: Есть около 43000 объектов у которых есть...

Удалить все файлы и каталоги из папки Temp - не удаляются ReadOnly-объекты
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru