Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/40: Рейтинг темы: голосов - 40, средняя оценка - 4.98
1 / 1 / 0
Регистрация: 15.10.2017
Сообщений: 38
1

Использование таймера в Unity

02.01.2018, 17:00. Показов 7909. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста!!! Пытаюсь сделать задержку действия после нажатия на кнопку.Мне надо сделать так, чтобы после нажатия на кнопку к переменной прибавлялась 1. Вот код.
C#
1
2
3
4
5
6
7
8
9
public Text woodtext;
public Timer woodt = new Timer();
    public void wood()
    {
        woodt.Enabled = true;
        woodt.Interval = 4000;
        tree++;
        woodtext.text = Convert.ToString(tree);
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.01.2018, 17:00
Ответы с готовыми решениями:

Запуск таймера Unity C#
Нужна помощь с реализацией Суть: есть таймер, который запускает панель...

Хранение и использование данных в Unity
Доброго времени суток! Пишу простенькую 2d игрушку-тест под Windows. Дело дошло до самой игровой...

[Unity] Использование нескольких камер
Здравствуйте. Настал тот случай, когда мне понадобилось две камеры, но вдруг я тут же столкнулся с...

Использование таймера
Здравствуйте, почему-то не компилируется код с испольльзованием таймера. #include...

13
Эксперт .NET
12499 / 8683 / 1310
Регистрация: 21.01.2016
Сообщений: 32,613
02.01.2018, 17:10 2
RaymondNDo, речь идёт про игрушку?
0
1 / 1 / 0
Регистрация: 15.10.2017
Сообщений: 38
02.01.2018, 17:41  [ТС] 3
Да, делаю игру и не могу понять, как установить задержку после нажатия на кнопку. Нажал, 4 секунды прошло и только после этого прибавляется единица
0
Эксперт .NET
12499 / 8683 / 1310
Регистрация: 21.01.2016
Сообщений: 32,613
02.01.2018, 18:13 4
RaymondNDo, ваша задержка не должна влиять на игровой цикл. Сохраните время начала ожидания где-то, и на каждой итерации игрового цикла проверяйте разницу во времени (текущее время минус сохранённое). Когда эта разница станет больше четырёх секунд - выполняйте своё действие.
1
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
02.01.2018, 20:36 5
Usaga,
Цитата Сообщение от Usaga Посмотреть сообщение
ваша задержка не должна влиять на игровой цикл.
Цитата Сообщение от Usaga Посмотреть сообщение
Сохраните время начала ожидания где-то, и на каждой итерации игрового цикла проверяйте разницу во времени (текущее время минус сохранённое). Когда эта разница станет больше четырёх секунд - выполняйте своё действие.
В C# разве нет возможности выполнить асинхронную операцию, например как setTimeout в javascript ?
0
1 / 1 / 0
Регистрация: 15.10.2017
Сообщений: 38
03.01.2018, 01:02  [ТС] 6
А можно ответ дать кодом, а то на словах как-то не очень понимаю.
0
1453 / 845 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
03.01.2018, 03:58 7
Цитата Сообщение от dailydose Посмотреть сообщение
В C# разве нет возможности выполнить асинхронную операцию, например как setTimeout в javascript ?
О! Очередной любитель совать асинхронность во все дыры!
Возможность есть, но речь идёт про игровое время!
1
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
03.01.2018, 06:30 8
Цитата Сообщение от LeniumSoft Посмотреть сообщение
любитель совать асинхронность во все дыры!
и не только асинхронность .
0
Эксперт .NET
12499 / 8683 / 1310
Регистрация: 21.01.2016
Сообщений: 32,613
03.01.2018, 07:28 9
Цитата Сообщение от dailydose Посмотреть сообщение
В C# разве нет возможности выполнить асинхронную операцию, например как setTimeout в javascript ?
Есть: System.Windows.Forms.Timer. Он ставит сообщения о "тиках" в общую очередь. Но хбз как это будет с юнити сочетаться.

Добавлено через 4 минуты
Но я бы такое использовать не стал, ибо игровое время может отличаться от реального (пауза, например). Лучше организовать свою реализацию таймеров в игрушке.

Цитата Сообщение от RaymondNDo Посмотреть сообщение
А можно ответ дать кодом, а то на словах как-то не очень понимаю.
Кодом чего? Как текущее время в переменную сохранить, а потом сравнивать на каждой итерации? Это так сложно? Environment.TickCount в руки и вперёд.

Кстати, а вы не интересовались, нет ли в юниты функционала таймера? Есть подозрение, что это ну очень востребованная фича, которая сто пудов должна быть в движке.
1
1 / 1 / 0
Регистрация: 15.10.2017
Сообщений: 38
03.01.2018, 12:15  [ТС] 10
Ну посмотрим.
0
1453 / 845 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
03.01.2018, 17:42 11
Добавлено через 2 минуты
А вот целый гайд!
http://unity3d.ru/distribution... 11&t=30892
0
5266 / 2865 / 480
Регистрация: 05.10.2013
Сообщений: 7,615
Записей в блоге: 154
04.01.2018, 23:25 12
Лучший ответ Сообщение было отмечено Usaga как решение

Решение

Не по теме:

RaymondNDo, для Unity есть специальный раздел: https://www.cyberforum.ru/unity/



Цитата Сообщение от RaymondNDo Посмотреть сообщение
Нажал, 4 секунды прошло и только после этого прибавляется единица
Метод Invoke:
C#
1
public void Invoke(string methodName, float time);
Запускает указанный метод "methodName" через указанное количество секунд.

Пример из документации:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using UnityEngine;
using System.Collections.Generic;
 
public class ExampleScript : MonoBehaviour
{
    // Launches a projectile in 2 seconds
 
    Rigidbody projectile;
 
    void Start()
    {
        Invoke("LaunchProjectile", 2);
    }
 
    void LaunchProjectile()
    {
        Rigidbody instance = Instantiate(projectile);
        instance.velocity = Random.insideUnitSphere * 5;
    }
}
Если нужно, чтобы указанный метод вызывался с указанным интервалом периодически, то для этого есть метод InvokeRepeating:
C#
1
public void InvokeRepeating(string methodName, float time, float repeatRate);
Пример из документации:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using UnityEngine;
using System.Collections.Generic;
 
// Starting in 2 seconds.
// a projectile will be launched every 0.3 seconds
 
public class ExampleScript : MonoBehaviour
{
    public Rigidbody projectile;
 
    void Start()
    {
        InvokeRepeating("LaunchProjectile", 2.0f, 0.3f);
    }
 
    void LaunchProjectile()
    {
        Rigidbody instance = Instantiate(projectile);
 
        instance.velocity = Random.insideUnitSphere * 5;
    }
}
2
1 / 1 / 0
Регистрация: 15.10.2017
Сообщений: 38
08.01.2018, 12:53  [ТС] 13
Спасибо!!!
1
5266 / 2865 / 480
Регистрация: 05.10.2013
Сообщений: 7,615
Записей в блоге: 154
08.01.2018, 13:08 14
Ещё один популярный способ создания таймера на Unity - это корутина (сопрограмма): https://docs.unity3d.com/Scrip... utine.html

Здесь несколько примеров с корутиной: https://docs.unity3d.com/Manual/Coroutines.html

Пример из документации, который выводит на экран строку спустя 5 секунд:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using UnityEngine;
using System.Collections;
 
public class ExampleClass : MonoBehaviour
{
    IEnumerator WaitAndPrint()
    {
        // suspend execution for 5 seconds
        yield return new WaitForSeconds(5);
        print("WaitAndPrint " + Time.time);
    }
 
    IEnumerator Start()
    {
        print("Starting " + Time.time);
 
        // Start function WaitAndPrint as a coroutine
        yield return StartCoroutine("WaitAndPrint");
        print("Done " + Time.time);
    }
}
0
08.01.2018, 13:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2018, 13:08
Помогаю со студенческими работами здесь

Использование таймера
Подскажите как сделать чтоб через каждые N минут открывался дисковод

Использование таймера
Всем привет. Хотел бы узнать, каким именно кодом сделать так, что бы программа через...

Использование таймера в службе
Здравствуйте. есть решение с двумя проектами: служба windows и библиотека классов. В службе...

Использование таймера в часах
Вообщем прошу помочь :scratch: Возможно ли как-то в паскале закинуть таймер к часам ? Т.е. ...


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

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