3d 360°;带滑块的slerp水平旋转摄像机
我正在尝试创建一个脚本,允许我通过水平滑块在0°-360°(y轴)范围内旋转相机,并具有Slerp效果。相机只能沿着一个轴旋转(我在一个房间的中间,我必须用一个水平滑块旋转) 我制作了两个脚本: 第一个应用于参考立方体以获得旋转,第二个应用于腔室以获得Slerp效应,同时跟随立方体旋转 360°立方体旋转脚本:3d 360°;带滑块的slerp水平旋转摄像机,3d,rotation,slider,360-degrees,3d,Rotation,Slider,360 Degrees,我正在尝试创建一个脚本,允许我通过水平滑块在0°-360°(y轴)范围内旋转相机,并具有Slerp效果。相机只能沿着一个轴旋转(我在一个房间的中间,我必须用一个水平滑块旋转) 我制作了两个脚本: 第一个应用于参考立方体以获得旋转,第二个应用于腔室以获得Slerp效应,同时跟随立方体旋转 360°立方体旋转脚本: public float speed; public Vector3 offset; public GameObject ObjectToRotate;
public float speed;
public Vector3 offset;
public GameObject ObjectToRotate;
public void SliderChanged(float speed)
{
ObjectToRotate.transform.rotation = Quaternion.Euler (speed*offset);
}
具有Slerp效果的摄影机旋转脚本:
public Transform target;
public float Speed = 0.1F;
// Update is called once per frame
void Update () {
transform.rotation = Quaternion.Slerp (transform.rotation, target.rotation, Speed);
}
}
它可以工作,但存在一些问题:
如果滑块从左(0°)向右(359°)运行过快,则Slerp旋转不会正确继续,但似乎仅旋转1°,就好像它回来了一样
我怎样才能解决这个问题?谢谢
Slerp
将始终在两个方向之间采用最短路径,因此如果您从0
开始,并希望在359
结束,那么您将无法通过所有这些值进行很好的旋转,但您已经看到了
以下是我的解决方法:
Transform
将数据从UI滑块传递到对象。仅使用带有角度值的浮点
。从UI获取并将其作为目标旋转传递给对象0
,现在您将目标设置为359
,因此我们从0
正向旋转。如果每帧速度为10度
,则以旋转10
结束,并将其存储为最后一次旋转0-359
范围的行为符合您的预期。然后,在插值之后,引入四元数以将该值用作旋转数据
顺便说一句:有了这个技巧,你也可以使用更大的范围,比如0-720,以能够做两个或更多的旋转。你不能用四元数做同样的事情。谢谢你的回复。尽管我在代码方面遇到了障碍,我还是会做一些测试。我试着写脚本,但我无法解决它。旋转仅按脚本(10)中指定的值移动。有人能帮我吗?公共游戏对象对象旋转;浮动值角度=10f;四元数旋转=四元数角度轴(10f,矢量3向上);public void SliderChanged(浮动速度){ObjectToRotate.transform.rotation=rot;}