задержка

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

задержка

Сообщение Blitz 12 дек 2009, 17:08

Приветствую русскоязычную часть пользователей Юнити
трабла такая:
Есть GameObject на который наложен скрипт
Этот GameObject должен спавнить префабы с перерывом в (допустим) 3 секунды
Проблема: скрипт не работает! :-w
первый вариант
Скрытый текст:
Код: Выделить всё
using UnityEngine;
using System.Collections;

public class Spawner : MonoBehaviour {
   public GameObject objEnemy;
   
IEnumerator Waiter () {
yield return new WaitForSeconds (2);
yield return 0;
   Instantiate(objEnemy);
}   
   
   // Use this for initialization
   void Start () {
   
      }
   
   // Update is called once per frame
   void Update ()
   {
   Waiter();
         Instantiate(objEnemy);
   }

}

второй вариант
Скрытый текст:
Код: Выделить всё
using UnityEngine;
using System.Collections;

public class Spawner : MonoBehaviour {
//var GameObject enemyPrefab
   public GameObject objEnemy;
   
   // Use this for initialization
   void Start () {
   
      }
   
   // Update is called once per frame
   void Update ()
   {
     objEnemy = Instantiate(objEnemy);
     yeld return 0;
   }
   
}

3й вариант
Скрытый текст:
Код: Выделить всё
using UnityEngine;
using System.Collections;
public class Spawner : MonoBehaviour {
public GameObject objEnemy;
   
   // Use this for initialization
   void Start () {
   objEnemy = (GameObject) GameObject.FindWithTag ("Enemy");
   }
   
   // Update is called once per frame
   void Update ()
   {
      SpawnPoint();
   }
   
   void SpawnPoint ()
         {
         Instantiate (Enemy);
         yield return WaitForSeconds (Random.Range(1,5));
         }
}

где и как правильно поставить задержку чтобы префабы спавнились через нужное время.

З.Ы.: Туторы смотрел, Help смотрел, на офф.сайте спрашивал, гугл не знает, на лбу уже несколько швов (а стенка в крови)...
-что ты тут делаеш?
-да так, бегаю да кровь полакиваю
(с) Дневник вампира. José Andrade.
Blitz
UNец
 
Сообщения: 31
Зарегистрирован: 12 дек 2009, 16:49

Re: задержка

Сообщение Neodrop 12 дек 2009, 17:40

Вы неправильно запускаете коратину. Её нужно запускать через специальный метод MonoBehaviour.StartCoroutine

То есть, первый скрипт будет исправно работать, при такой правке :

Код: Выделить всё
void Update ()
   {
         StartCoroutine(Waiter());
         Instantiate(objEnemy);
   }


З.Ы. Ищите больше в вашем гугле. Может найдёте пару земленых орехов... :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: задержка

Сообщение gnoblin 12 дек 2009, 17:57

Нео, в прошлом посте описка?

Код: Выделить всё
IEnumerator Waiter () {
yield return new WaitForSeconds (2);

   Instantiate(objEnemy);
}

void Update ()
   {
         StartCoroutine(Waiter());
         
   }
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: задержка

Сообщение gnoblin 12 дек 2009, 17:57

void Update ()
{
StartCoroutine(Waiter());
Instantiate(objEnemy); //вот тут...
}
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: задержка

Сообщение Blitz 12 дек 2009, 18:00

Так?
Код: Выделить всё
using UnityEngine;
using System.Collections;

public class Spawner : MonoBehaviour {
   public GameObject objEnemy;
   
IEnumerator Waiter () {
yield return new WaitForSeconds (2);

}   
   
   // Use this for initialization
   void Start () {
   
      }
   
   // Update is called once per frame
   void Update ()
   {
         StartCoroutine(Waiter());
         Instantiate(objEnemy);
   }
   
}


теперь ошибки нет, но префабы спавнятся со скоростью 30-40 штук в секунду
З.Ы. а про орехи не понял
-что ты тут делаеш?
-да так, бегаю да кровь полакиваю
(с) Дневник вампира. José Andrade.
Blitz
UNец
 
Сообщения: 31
Зарегистрирован: 12 дек 2009, 16:49

Re: задержка

Сообщение Neodrop 12 дек 2009, 20:01

Вот так :

Код: Выделить всё
    using UnityEngine;
    using System.Collections;

    public class Spawner : MonoBehaviour {
       public GameObject objEnemy;
       
    IEnumerator Waiter () {
    yield return new WaitForSeconds (2);
    Instantiate(objEnemy);
     StartCoroutine(Waiter());
    }   
       
       // Use this for initialization
       void Start () {
       StartCoroutine(Waiter());
    }   
    }


Так у вас до конца сцены постоянно, каждые 2 секунды будет возникать новый враг.
Если хотите контроллировать процесс, добавьте какой-нить флаг и проверяйте его в Update() но ни в коем случае не пытайтесь в каждом кадре запускать коратину - вот вы и получили результат.

А про орехи, это шутка такая из фильма "Остров Сокровищ". Не люблю я гугл просто.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: задержка

Сообщение Blitz 13 дек 2009, 00:16

О! Класс! Спасибо!
мне для полного щастья (пока) больше ничего не надо =)

Гугл я приписал как самый распространённый FAQ. в этом форуме это Platformer Tutorial.
-что ты тут делаеш?
-да так, бегаю да кровь полакиваю
(с) Дневник вампира. José Andrade.
Blitz
UNец
 
Сообщения: 31
Зарегистрирован: 12 дек 2009, 16:49

Re: задержка

Сообщение AndrewSt 14 дек 2009, 16:57

А как насчет такого решения.
Код: Выделить всё
using UnityEngine;
using System.Collections;

public class Spawner : MonoBehaviour {
   public GameObject objEnemy;
   public float intervalCreate;
   public float startCreate;

   void Start () {
      InvokeRepeating("CreateNewObj", startCreate, intervalCreate);
   }

   void CreateNewObj (){
      Instantiate(objEnemy);
   }
}
AndrewSt
UNIт
 
Сообщения: 72
Зарегистрирован: 10 дек 2009, 13:36
Откуда: СПБ
  • ICQ

Re: задержка

Сообщение Neodrop 14 дек 2009, 20:11

Тоже вариант. :ymparty:
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт


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

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

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