我正在使用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秒,用户不移动该对象)?
答案 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);
}