Привет! Есть скрипт. После уничтожения врага рандомно создаются кубики на сцене. Как сделать так, что бы перед созданием кубиков все объекты на сцене останавливались, создавались кубики, а через некоторое время все объекты размораживались. Пробовал делать через корутин и Time.timeScale, но это не помогает, т.к. все должно выглядеть так. Враг умирает, все объекты замирают, через некоторое время создаются кубики, еще через некоторое время кубики уничтожаются и все объекты размораживаются. Пробовал так.
public IEnumerator LoadScoreCo() { Time.timeScale = 0f; yield return new WaitForSeconds (loadDelay); PlaceCubes() // рандомно создаются кубы yield return new WaitForSeconds (loadDelay); Time.timeScale = 1f; }
но т.к мы выключаем время, отсчет от loadDelay не идет. Может есть какой-нибудь другой способ заморозить все объекты на сцене? А, еще timeScale тут использовать нельзя, т.к. партикли тоже замирают, а они нужны
Вот перевод статьи про кастомные корутины https://habrahabr.ru/post/274305/, там пример реализации WaitForSeconds независящий от timeScale. Важно заметить, что к оригинальной статье было замечание в комментарии, вместо realtimeSinceStartup надо использовать unscaledTime, чтобы не было проблем при сворачивании игры. Код с улучшением:
Код
using UnityEngine;
public class WaitForSecondsRealtime : CustomYieldInstruction { private float waitTime;
public override bool keepWaiting { get { return Time.unscaledTime < waitTime; } }
Теперь вместо yield return new WaitForSeconds (loadDelay); пишешь yield return new WaitForSecondsRealtime (loadDelay);. Как вариант из статьи (задержка 5 секунд):
Добавлено (25 марта 2016, 20:07) --------------------------------------------- Партикли по прежнему не работают( Сделал как написано там, толку 0, они не проигрываются при scaleTime = 0 Буду искать дальше Точнее они проигрываются, но очень очень быстро, их почти не заметить Разобрался! На партиклях стоял скрипт Destroy Finished Particle.
Добавлено (27 марта 2016, 17:42) --------------------------------------------- Еще вопрос. Как можно обратиться ко всем одинаковым скриптам? Вот у меня есть скрипт, при котором стрелы летят во врага. Я сделал так. Создал на врага скрипт, при нажатии на него, в скрипте со стрелой false меняется на true, и стрела летит во врага. Но проблема, если у меня несколько стрел на экране, летит во врага только одна. Как это можно исправить? Вот сами скрпипты Стрелы:
Код
private EnemyCube theEnemy;
public float moveSpeed;
public bool itsReady;
private ArrowBack scriptStoped;
// Use this for initialization void Start () { theEnemy = FindObjectOfType<EnemyCube> (); //scriptStoped.enabled = false; itsReady = false;
}
// Update is called once per frame void Update () {
Вместо Object.FindObjectOfType используй Object.FindObjectsOfType возвращает все объекты данного типа:
Код
public float moveSpeed;
private EnemyCube theEnemy;
private ArrowBack[] startNow; // Use this for initialization void Start () { startNow = FindObjectsOfType<ArrowBack> (); theEnemy = FindObjectOfType<EnemyCube> (); //startNow.enabled = false; }
// Update is called once per frame void Update () {
}
void OnMouseDown() { foreach (var sn in startNow) sn.itsReadyTrue (); Debug.Log ("Cube Work"); } }
Добавлено (27 марта 2016, 19:02) --------------------------------------------- Хотя тебе надо в OnMouseDown перенести startNow = FindObjectsOfType<ArrowBack> ();, потому что их надо искать во время клика.