保持一个轴的旋转并将其他轴与父对齐

时间:2016-11-07 10:45:29

标签: unity3d rotation quaternions

我在保持一个轴锁定时遇到问题。我有两个工具可以用来像对象一样抓住这个模拟针。

Tool grabbing "needle"

我只需要能够保持其自身的旋转(局部y)并将其余部分与工具的旋转对齐。但是,目前我只能弄清楚如何旋转所有轴:

Tool having grabbed "needle"

代码看起来像这样:

 case 1:
 this.transform.rotation = leftParent.transform.rotation;
 this.transform.SetParent (leftParent);
 break;
 case 2:
 this.transform.rotation = rightParent.transform.rotation;
 this.transform.SetParent (rightParent);
 break;

我尝试了什么:

  • 在局部和全局旋转上使用.Set,保持y和/或w旋转
  • =新的四元数作为局部和全局旋转,保持y和/或w
  • 匹配父旋转后旋转针
  • 在育儿后旋转针

如果我错过了一些明显的东西,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您要找的是 Transform.localRotation Tranform.localEulerAngles :您可以找到有关here的更多信息。

在你的情况下,我会做这样的事情(考虑你的“手”对象几何是预期的):

case1 :
//Adjust the rotation you want to keep here (I assume on Y axis in your case)
transform.SetParent(leftParent);
transform.localEulerAngles = new Vector3(0.0f, transform.localEulerAngles.y, 0.0f);
break;
case2 :
//Adjust the rotation you want to keep here (I assume on Y axis in your case)
transform.SetParent(rightParent);
transform.localEulerAngles = new Vector3(0.0f, transform.localEulerAngles.y, 0.0f);
break;

顺便说一下,在您的情况下不需要this关键字,因为transform单独指的是附加脚本的转换