Как вызвать функцию, когда «действие пользователя» заканчивается? - PullRequest
1 голос
/ 03 июля 2019

Я занимаюсь разработкой мультимедийного приложения с использованием C # и Unity.

В этом приложении пользователь может перемещать объект с помощью колесика мыши; так я написал

private void MoveObjectUpDown(float value)
{
     MyObject.transform.position = MyObject.transform.position + new Vector3(0, value, 0); 
     StartCoroutine(UpdateObjectPositionToServer(MyObject.transform.position, MyObject.MyObjectID);            

}

MyObjectUpAndDown вызывается из проверки обновлений

Input.GetAxis ("колесо прокрутки мыши");

UpdateObjectPositionToServer - это вызов веб-службы; в этом веб-сервисе я обновляю MySql Table через Query.

Как вы можете себе представить, если пользователь переместит всю мышь, чтобы переместить мой объект, будет много вызовов UpdateObjectPositionToServer; мой вопрос:

Какой подход можно использовать не для вызова UpdateObjectPositionToServer после каждого перемещения пользователя, а только один раз, в конце перемещения пользователя (возможно, 1 или 2 секунды пользователь не перемещает этот объект)?

1 Ответ

1 голос
/ 03 июля 2019

Одним из способов решения этой проблемы является создание сопрограммы-обертки, которая ожидает некоторое время перед запуском сопрограммы UpdateObjectPositionToServer, и останавливает любой уже существующий ранее экземпляр сопрограммы-обертки.

private IEnumerator currentWaitCoroutine = null;

private void MoveObjectUpDown(float value)
{
     MyObject.transform.position = MyObject.transform.position + new Vector3(0, value, 0); 

     if (currentWaitCoroutine != null)
     {
         StopCoroutine(currentWaitCoroutine);
     }

     currentWaitCoroutine = WaitAndCall(1.5f);
     StartCoroutine(currentWaitCoroutine);
}

private IEnumerator WaitAndCall(float seconds) {
    yield return new WaitForSeconds(seconds);

    StartCoroutine(UpdateObjectPositionToServer(MyObject.transform.position, MyObject.MyObjectID);   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...