Рандомное создание объектов

Программирование на Юнити.

Рандомное создание объектов

Сообщение Nikopol 02 мар 2011, 13:39

Необходимо рандомно создавать объекты на игровом поле на случайное время (потом они исчезают). Кол-во ограничено допустим 10. 3 вида объектов: шар, куб, цилиндр. Должные создаваться разного размера.

Как я понимаю, нужно создать 3 префаба по количеству объектов. Создать пустой объект объявить переменные и загрузить префаба во внутрь этих переменных. Как организовать временную и случайную логику создания и удаления объектов?
Nikopol
UNец
 
Сообщения: 9
Зарегистрирован: 02 мар 2011, 13:33

Re: Рандомное создание объектов

Сообщение waruiyume 02 мар 2011, 14:59

Nikopol писал(а): Как организовать временную и случайную логику создания и удаления объектов?

Временная и случайная логика... это куда? :-\
В [unity 3D] 6 встроенных генераторов псевдослучайных чисел :ymparty:
А почему Destroy не подходит для удаления через случайное время?
Синтаксис:
Используется javascript
var min_life:float=1;
var max_life:float=10;
function Start()
{
Destroy(gameObject,Random.Range(min_life,max_life));
}
 
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Рандомное создание объектов

Сообщение Nikopol 03 мар 2011, 12:21

Хорошо, но как сделать чтобы объекты сами добавлялись. Допустим создал 10 штук если один уничтожается то чтобы новый появлялся. Т.е. всегда оставалось количество 10 штук?
Nikopol
UNец
 
Сообщения: 9
Зарегистрирован: 02 мар 2011, 13:33

Re: Рандомное создание объектов

Сообщение DbIMok 03 мар 2011, 12:44

так и сделать - при уничтожении создавать новый )
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Рандомное создание объектов

Сообщение Nikopol 03 мар 2011, 12:55

DbIMok писал(а):так и сделать - при уничтожении создавать новый )


Я создаю лист объектов допустим в скрипте A:

list.Add(Instantiate(prefab1, position, transform.rotation) as Rigidbody);

Они сам удаляют себя в скрипте B. Количество из листа не удаляется. Как отслеживать их удаление. Как я понял префабов не существует, т.е. весь список у меня null.
Nikopol
UNец
 
Сообщения: 9
Зарегистрирован: 02 мар 2011, 13:33

Re: Рандомное создание объектов

Сообщение Zaicheg 03 мар 2011, 13:06

Код: Выделить всё
public class MyClassA {... public List<> list ...} // первый скрипт, висит на ГО MyGO
public class MyClassB { Destroy(gameObject); GameObject.Find("MyGO").GetComponent<MyClassA>().list.Remove(gameObject); } // второй скрипт, висит где угодно

можно и через static-переменные, например, чтобы поиски и геткомпоненты не делать.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Рандомное создание объектов

Сообщение Nikopol 03 мар 2011, 13:08

Zaicheg писал(а):можно и через static-переменные, например, чтобы поиски и геткомпоненты не делать.


Извини конечно, но статик это, как бы помягче сказать, зло. Надо каким то другим образом.
Nikopol
UNец
 
Сообщения: 9
Зарегистрирован: 02 мар 2011, 13:33

Re: Рандомное создание объектов

Сообщение Zaicheg 03 мар 2011, 13:11

Nikopol писал(а):Извини конечно, но статик это, как бы помягче сказать, зло. Надо каким то другим образом.

Я вам дал пример без статик. Вам действительно до сих пор непонятно, каким образом из одного скрипта удалить элемент листа в другом скрипте?
Кстати, почему статик -- это зло?
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Рандомное создание объектов

Сообщение Nikopol 03 мар 2011, 13:17

Zaicheg писал(а):
Nikopol писал(а):Извини конечно, но статик это, как бы помягче сказать, зло. Надо каким то другим образом.

Я вам дал пример без статик. Вам действительно до сих пор непонятно, каким образом из одного скрипта удалить элемент листа в другом скрипте?
Кстати, почему статик -- это зло?


Понятно, просто вначале ответил на конец сообщения. Статик зло так как всегда в памяти весит.
Nikopol
UNец
 
Сообщения: 9
Зарегистрирован: 02 мар 2011, 13:33

Re: Рандомное создание объектов

Сообщение Zaicheg 03 мар 2011, 13:34

— Ага-а-а! -- сказал Зайчик и пошёл дальше использовать static везде, где это удобно.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Рандомное создание объектов

Сообщение Nikopol 04 мар 2011, 22:15

Хм. Теперь возникла проблема синхронизации данных. Так как много объектов могу сами себя удалять одновременно, поэтому из массива некоторые не удаляются. Как осуществить синхронизацию масива
Nikopol
UNец
 
Сообщения: 9
Зарегистрирован: 02 мар 2011, 13:33

Re: Рандомное создание объектов

Сообщение Zaicheg 04 мар 2011, 22:24

5000 объектов удаляют сами себя в одном кадре (то бишь, одновременно, насколько это вообще возможно). После нажатия "J" я получаю длину листа 0 в консоли. Тут точно нужно что-то синхронизировать?

Синтаксис:
Используется csharp
public class General : MonoBehaviour
{
    public static List<GameObject> list = new List<GameObject>();

    void Start()
    {
        for (int i = 0; i < 5000; i++)
        {
            GameObject go = new GameObject("GO", typeof(Sub)) as GameObject;
            go.transform.parent = transform;
            list.Add(go);
        }
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.J))
        {
            Debug.Log(list.Count);
        }
    }
}
 


Синтаксис:
Используется csharp
public class Sub : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.B))
        {
            General.list.Remove(gameObject);
            Destroy(gameObject);
        }
    }
}
 
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Рандомное создание объектов

Сообщение Nikopol 04 мар 2011, 23:25

Попробуй сделать по таймеру удаление.
Nikopol
UNец
 
Сообщения: 9
Зарегистрирован: 02 мар 2011, 13:33

Re: Рандомное создание объектов

Сообщение Zaicheg 04 мар 2011, 23:37

В рамках скрипта Sub я попробовал так:
Синтаксис:
Используется csharp
if (Input.GetKeyDown(KeyCode.B))
{
        General.list.Remove(gameObject);
        Destroy(gameObject, 2f);
}


и так:
Синтаксис:
Используется csharp
void Awake()
{
        Invoke("SelfDestroy", 2f);
}

void SelfDestroy()
{
        General.list.Remove(gameObject);
        Destroy(gameObject);
}


В консоли я по-прежнему вижу нуль и по-прежнему не понимаю ваших затруднений.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Рандомное создание объектов

Сообщение Nikopol 04 мар 2011, 23:43

Да провел, ошибочка. Ошибка была в другом части. Спасибки все получилось
Nikopol
UNец
 
Сообщения: 9
Зарегистрирован: 02 мар 2011, 13:33


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 9