当“用户操作”结束时如何调用函数?

时间:2019-07-03 18:42:05

标签: c# unity3d

我正在使用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(“ Mouse ScrollWheel”);

UpdateObjectPositionToServer是对Web服务的调用;在此Web服务中,我通过查询更新了MySql表。

您可以想象,如果用户通过鼠标移动我的对象,将会有很多对UpdateObjectPositionToServer的调用;我的问题是:

哪种方法,我不能在每次用户移动之后不调用UpdateObjectPositionToServer,而是在用户移动结束时调用一次(也许1或2秒,用户不移动该对象)?

1 个答案:

答案 0 :(得分:1)

一种解决方法是创建一个包装协程,该协程在启动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);   
}