Лааааааги

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Лааааааги

Сообщение X_T_F 16 июл 2018, 02:21

Нужна помощь. У меня есть игровой объект со скриптом, в скрипте вот что прописано
Синтаксис:
Используется csharp
    private GameObject gameManager;
    private Coin scriptCoin;
    public int lvl;

        void Start () {
       // gameManager = GameObject.Find("Coin");
        }
       
        void Update () {
        if (lvl > 0)
        {
            Thread.Sleep(10000);
            GameObject.Find("Coin").GetComponent<Coin>().rrr += 100;
            GameObject.Find("Coin").GetComponent<Coin>().ScoreText.text = GameObject.Find("Coin").GetComponent<Coin>().rrr + "";
        }
    }

    public void OnMouseDown() {
        lvl++;
    }


То есть при нажатии на объект, очки на другом объекте увеличиваются на 100 каждые 10 секунд. И это должно продолжаться бесконечно. Но когда запускаю у меня начинает все дико тормозить. Подскажите в чем проблема.
X_T_F
UNец
 
Сообщения: 13
Зарегистрирован: 30 янв 2018, 07:38

Re: Лааааааги

Сообщение Anonymyx 16 июл 2018, 04:19

А вы знаете что такое Thread.Sleep()?
1. Метод .Sleep 'заморозит' поток в котором он вызван, а вызываете вы его в потоке 'Main', т.е. в главном потоке, или как его еще называют - UI поток, поток взаимодействия с пользователем.
2. У вас за 1 вызов Update() в данном классе происходит 6 относительно 'дорогих' операций, Find() и GetComponent<>(). Почитайте про кэширование компонентов.

А так, задачу можно решить через корутинку:

Синтаксис:
Используется csharp
IEnumerator IncreaseRRR()
{
while(true)
{
//Здесь делаете то что надо
yield return new WaitForSeconds(10);
}
}
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: Лааааааги

Сообщение X_T_F 16 июл 2018, 14:25

Точно, я совсем забыл про yield. Спасибо. Только у меня теперь другой вопрос. Как мне правильно его вызвать. Точнее где??? Если вызывать его в Update, то задержки вроде как нету, ведь на сколько я знаю Update вызывается с каждым новым кадром. А в классе просто так(не в методе) не пропишешь
Синтаксис:
Используется csharp
    if (lvl > 0)
        {
            StartCoroutine(IncreaseRRR());
        }

То есть мне нужна функция, которая при определенной значении переменной начинает вызывать сама себя. Можете подсказать как это сделать??
X_T_F
UNец
 
Сообщения: 13
Зарегистрирован: 30 янв 2018, 07:38

Re: Лааааааги

Сообщение 1max1 16 июл 2018, 15:12

Синтаксис:
Используется csharp
GameObject gameManager;
    Coin coin;
    public int lvl;

    void Start()
    {
        coin = GameObject.Find("Coin").GetComponent<Coin>();
    }

    void OnMouseDown()
    {
        ++lvl;

        if (lvl > 0)
        {
            StartCoroutine(IncreaseRRR());
        }
    }

    IEnumerator IncreaseRRR()
    {
        while (true)
        {          
            coin.rrr += 100;
            coin.ScoreText.text = coin.rrr + "";

            yield return new WaitForSeconds(10.0f);
        }
    }
 
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Лааааааги

Сообщение X_T_F 16 июл 2018, 16:30

Аааааааааааааа, я думал что она сработает только 1 раз при клике и все, а дальше не будет считать. Спасибо.
X_T_F
UNец
 
Сообщения: 13
Зарегистрирован: 30 янв 2018, 07:38

Re: Лааааааги

Сообщение Anonymyx 16 июл 2018, 20:00

1max1, не, так не пойдет, при каждом клике будет создаваться новый экзеспляр корутины, и эффект будет суммироваться.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: Лааааааги

Сообщение 1max1 16 июл 2018, 20:05

Мне кажется ему это и нужно, там же еще лвл повышается, хотя я хз, может и не так (popcorn1)
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Лааааааги

Сообщение Fox_game 17 июл 2018, 00:17

У меня такая идея. Может всяких новичков, которые используют команды, даже не зная их предназначение, вместо того, чтоб тыкать в их ошибки, отправлять в самую (полная Ж) , читать мануалы, чтоб небыло глупых вопросов....
Fox_game
UNIт
 
Сообщения: 117
Зарегистрирован: 08 июл 2017, 19:33

Re: Лааааааги

Сообщение seaman 17 июл 2018, 08:47

А Вы не заходите в "Почемучку"
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Почемучка

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25