C# Vector3 Lerp 每秒

问题描述

我在一个项目中工作,我必须通过服务器数据包大约每秒发送一个信息来移动一个对象。该信息向我发送了对象必须移动的新位置,我正在使用 Vector3.Lerp 来执行该移动。我看到的问题如下:

当我只读取发送的 1 个数据包时,它移动得很轻,还可以,但是当我每秒读取大量接收到的数据包时,该对象什么也不做,一段时间后,它急剧移动。我不知道为什么会这样,也许是因为每秒接收一个新位置会使 Lerp“崩溃”。我不知道。这是我的代码:

public void Update() 
    {
        if (DataFromGTAPackets.Packet2.exerciseStatus == "R")
        {
            if (DataFromGTAPackets.Packet8.lastUpdatingTime == 0) // Avoid t go to infinity
                DataFromGTAPackets.Packet8.lastUpdatingTime = 1;
            float timeToReachTarget = DataFromGTAPackets.Packet8.actualUpdatingTime / 1000 - DataFromGTAPackets.Packet8.lastUpdatingTime / 1000;
            t += Time.deltaTime / timeToReachTarget;
          
            foreach (int airplaneID in ReadFileData.RFData.mobilesInfo.Keys)
            {
                if (Convert.ToInt32(this.gameObject.name) == airplaneID)
                {                   
                    transform.position = Vector3.Lerp(previousPos,nextPos,t);
                    transform.rotation = Quaternion.Lerp(previousRot,nextRot,t);                   
                }
            }
        }
    }

时间由服务器消息给出(大约每 1 秒一次),所以我使用这些变量(actualUpdatingTime 和 lastUpdatingTime)进行我的 Vector3.Lerp 时间计算。 变量previousPos 和previousRot 是对象在接收服务器消息时的transform.position/transform.rotation。 nextPos 和 nextRot 是服务器消息给出的变量,表示对象必须达到的新位置和旋转。

在此先感谢您!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...