话不多说,如图所示,这就是我在unity编写的一段用来实现其他玩家y轴平滑旋转的代码
Quaternion quaternion = Quaternion.Euler(new Vector3(0f, this.rot.y, 0f));
Quaternion quaternion2 = Quaternion.Euler(new Vector3(0f, this.tarRot.y, 0f));
float num = Quaternion.Angle(quaternion, quaternion2);
float t = Mathf.Min(1f, num / 360f);
this.rot.y = Quaternion.Lerp(quaternion, quaternion2, t).eulerAngles.y;
base.transform.rotation = Quaternion.Euler(new Vector3(0f, this.rot.y, 0f));

这段代码的效果为: 当this.tarRot.y的值改变后,代码将会进行一个插值运算,并使得this.rot.y逐渐逼近this.tarRot.y,然后的话this.tarRot.y是新接收到的玩家旋转轴的值,rot.y是玩家的平滑旋转轴,用来实现玩家的平滑旋转
PS:之所以代码需要用到四元数,是因为当玩家广播的欧拉角(y轴)突然从359度过渡到1度的时候,rot.y会从359度平滑减少到1度,而使用四元数就会先增加到360度,然后360度就会变成零度接着再逐渐增加到一度,这样就能够解决玩家在特殊情况下旋转角度过大的问题,但缺点就是只会选择一个最小的角度和方向进行旋转
示意图如下:

但是现在我想换一种旋转方式,可以看到图片中有两个部分,我想在新的代码中实现让玩家以一个比较大的旋转角度进行旋转

但问的就是我只知道可以使用插值运算来实现平滑角度(this.rot.y)逐渐接近目标角度,但我不知道该用什么其他的方法来实现平滑角度反方向接近目标角度

求真人来解答,也在外网上找了很多教程,但都不是我想要的,并且如果可以的话新代码不要破坏原有的平滑旋转