@DorVeytarn
учу юнити и C#

Как вызывать метод ограниченное количество раз?

Здравствуйте! Учусь делать игры на юнити. Захотелось сделать свою копию приложения "Выкрутасы". Это где нужно объяснять слова.

Управление процессом происходит при помощи акселерометра. Телефон наклонен назад - слово угадано, наклонен вперед - не угадано. Соответственно, после этого нужно сменить слово.

В Update я проверяю это условие наклона телефона. Если оно больше опред. значения, меняется слово. Проблема в том, что слова начинают меняться без остановки с большой скоростью. Как это исправить?

Наверное, нужно сделать какой-то обработчик событий или делать это не в Update. Подскажите, что нужно знать, чтобы решить эту проблему или хотя бы куда копать)

public class Test : MonoBehaviour
{
    private string[] words = new string [6];
    public Text currentText;

    public float valueY; 

    // фильтр для акселерометра
    public float AccelerometerUpdateInterval = 1.0f / 100.0f;
    public float LowPassKernelWidthInSeconds = 0.001f;
    public Vector3 lowPassValue = Vector3.zero;



    void Start()
    {
        lowPassValue = Input.acceleration;

        words[0] = "Кот";
        words[1] = "Собака";
        words[2] = "Ворона";
        words[3] = "Курица";
        words[4] = "Змея";
        words[5] = "Бобр";
    }

    private void Update()
    {
        valueY = lowpass().y;

        if (valueY <= -0.5f)
        {
            currentText.text = words[Random.Range(0, 5)];
        }
        else if(valueY >= -0.7f)
        {
            currentText.text = words[Random.Range(0, 5)];
        }

    }

    //фильтр
    Vector3 lowpass()
    {
        float LowPassFilterFactor = AccelerometerUpdateInterval / LowPassKernelWidthInSeconds; 
        lowPassValue = Vector3.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor);
        return lowPassValue;
    }
}
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
@Frendy
Самый простой способ использовать флаг:
bool flag = true;

private void Update()
    {
        valueY = lowpass().y;

        if (valueY <= -0.5f)
        {
            if(flag){
                 currentText.text = words[Random.Range(0, 5)];
                 flag = false;
            }
        }
        else if(valueY >= -0.7f)
        {
            if(flag){
                 currentText.text = words[Random.Range(0, 5)];
                 flag = false;
            }
        }else if (valueY == 0)
        {
                 flag = true;
        }
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы