用户控制的四元数 Slerp?
User controlled Quaternion Slerp?
我正在尝试使用用户控件旋转球体。
void RotateGlobe() {
SetLock();
if (Input.GetMouseButton(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
userInput.x = Input.GetAxis("Mouse X");
userInput.y = Input.GetAxis("Mouse Y");
if (userInput.magnitude > 0 & Physics.Raycast(ray, Mathf.Infinity, LayerMask.NameToLayer("UI")))
{
Vector2 movement = new Vector2(Mathf.Sign(userInput.x), Mathf.Sign(userInput.y));
globe.transform.rotation =
Quaternion.Slerp(globe.transform.rotation,
Quaternion.Euler(0, movement.y * 90, movement.x * 180 + globe.transform.rotation.eulerAngles.x),
Time.time * speed);
}
}
RemoveLock();
}
我不太了解四元数(话又说回来,谁真正了解),但地球仪不仅没有正确响应用户输入,而且还卡在 x 轴上。我知道它可能通过不动从 180 到 -180 走最短路径。
我想在这一点上,我完全愿意更改此代码以支持更好的方法(不是 slerp),但我完全被卡住了,以前的方法同样困难和不稳定。
你建议我如何旋转这个球体?
作为奖励,如果我可以约束一个轴,那就太好了。我真的不想旋转超过 90 或 -90。
简单的解决方案 - 您可以使用 Unity 的 RotateAround,这是他们最有用的调用之一
http://docs.unity3d.com/ScriptReference/Transform.RotateAround.html
请注意,网上有一些令人困惑的评论说 RotateAround 已被弃用;事实上,它只是一个被弃用的旧版本。这是您在 Unity 中最常用的调用之一。享受吧!
其次。
请注意,您确实在计算欧拉角!或可能的 localEulerAngles。 你可以简单地在它们之间偷偷摸摸!!!!
有点像....
Vector3 fromEulers = blah;
Vector3 toEulers = blah;
transform.localEulerAngles = .. slerp .. fromEulers toEulers;
终于。请注意,"lerp -like" 函数具有类似 MoveTowards 的等价物,您可以使用 "in your own step".
SmoothStep 实际上是 unity 中最有用的调用!
我正在尝试使用用户控件旋转球体。
void RotateGlobe() {
SetLock();
if (Input.GetMouseButton(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
userInput.x = Input.GetAxis("Mouse X");
userInput.y = Input.GetAxis("Mouse Y");
if (userInput.magnitude > 0 & Physics.Raycast(ray, Mathf.Infinity, LayerMask.NameToLayer("UI")))
{
Vector2 movement = new Vector2(Mathf.Sign(userInput.x), Mathf.Sign(userInput.y));
globe.transform.rotation =
Quaternion.Slerp(globe.transform.rotation,
Quaternion.Euler(0, movement.y * 90, movement.x * 180 + globe.transform.rotation.eulerAngles.x),
Time.time * speed);
}
}
RemoveLock();
}
我不太了解四元数(话又说回来,谁真正了解),但地球仪不仅没有正确响应用户输入,而且还卡在 x 轴上。我知道它可能通过不动从 180 到 -180 走最短路径。
我想在这一点上,我完全愿意更改此代码以支持更好的方法(不是 slerp),但我完全被卡住了,以前的方法同样困难和不稳定。
你建议我如何旋转这个球体?
作为奖励,如果我可以约束一个轴,那就太好了。我真的不想旋转超过 90 或 -90。
简单的解决方案 - 您可以使用 Unity 的 RotateAround,这是他们最有用的调用之一
http://docs.unity3d.com/ScriptReference/Transform.RotateAround.html
请注意,网上有一些令人困惑的评论说 RotateAround 已被弃用;事实上,它只是一个被弃用的旧版本。这是您在 Unity 中最常用的调用之一。享受吧!
其次。
请注意,您确实在计算欧拉角!或可能的 localEulerAngles。 你可以简单地在它们之间偷偷摸摸!!!!
有点像....
Vector3 fromEulers = blah;
Vector3 toEulers = blah;
transform.localEulerAngles = .. slerp .. fromEulers toEulers;
终于。请注意,"lerp -like" 函数具有类似 MoveTowards 的等价物,您可以使用 "in your own step".
SmoothStep 实际上是 unity 中最有用的调用!