如何在Unity3D中基于角度速度旋转四元数?
我正在尝试做客户端预测轮换。我想这和我做这个职位的方式很相似。但我似乎找不到旋转四元数的方法如何在Unity3D中基于角度速度旋转四元数?,unity3d,Unity3d,我正在尝试做客户端预测轮换。我想这和我做这个职位的方式很相似。但我似乎找不到旋转四元数的方法 //这些是通过网络同步的 私人矢量3位置; 专用矢量3速度; 私有四元数旋转; 私人矢量3角速度; //职位 最佳猜测位置=最佳猜测位置+(速度*时间.延迟时间); transform.position=Vector3.Lerp(transform.position、bestGuessPosition、Time.deltaTime*latencySmoothingFactor); //旋转(不工作) b
//这些是通过网络同步的
私人矢量3位置;
专用矢量3速度;
私有四元数旋转;
私人矢量3角速度;
//职位
最佳猜测位置=最佳猜测位置+(速度*时间.延迟时间);
transform.position=Vector3.Lerp(transform.position、bestGuessPosition、Time.deltaTime*latencySmoothingFactor);
//旋转(不工作)
bestGuessRotation=bestGuessRotation+(角度速度*时间.增量时间);
transform.rotation=Quaternion.Lerp(transform.rotation、bestGuessRotation、Time.deltaTime*latencySmoothingFactor);
如何旋转我的
最佳猜测旋转
?似乎没有一个。像在变换上那样旋转在Unity中,两个四元数
使用“多重作用”(顺序很重要!)
您可以使用以下命令将Vector3
旋转角度速度
从Euler空间转换为四元数
bestGuessRotation*=四元数.Euler(角速度*时间.deltaTime);
顺便说一句,这个职位也可以写为
bestGuessPosition+=velocity*Time.deltaTime;
仅凭猜测您在Update
中使用Lerp
可能不是最佳选择,这取决于您对此轮换的确切期望
例如,如果在Update
中使用Lerp
作为简单的平滑算法,则应删除Time.deltaTime
,因为插值因子是一个百分比值,在这种情况下应保持不变