通过Unity中的代码创建一个轴心点

时间:2017-10-20 11:27:15

标签: c# unity3d

在Unity中创建门脚本时,您必须设置一个轴心点。你使门成为这个支点的孩子。打开门时,枢轴点会旋转,门会自动相对旋转。

我知道你可以在编辑器中创建一个空的GameObject,但我想通过代码来实现它。

[SerializeField]
Vector3 pivotPosition; // the spawn position of the pivot point

Transform pivot;

void Start()
{
        pivot= new GameObject().transform; // create the pivot point
        pivot.position = pivotPosition; // position the pivot point
        transform.SetParent(pivot); // parenting
}

因此,当检查员将门旋转了(0,0,0)时,这种方法很好。

例如,当旋转门时(0,-30,0),创建时枢轴点未正确放置。

Pivot Creation

如果正确放置,即使门被(x,y,z)旋转,我该怎样才能正确创建此枢轴点

3 个答案:

答案 0 :(得分:3)

您可以使用de-DE

实施例

Transform.RotateAround

https://docs.unity3d.com/ScriptReference/Transform.RotateAround.html

答案 1 :(得分:1)

通过执行pivot.position = pivotPosition;,您将枢轴放在对象的中心。

我在这里看到3个可行的选项:

1 - 如果您正在制作门的型号,您可以将其中心放在地面上的枢轴位置,以帮助定位门的高度

2 - 在枢轴位置使用带有父对象的门预制件。 (实际上可以将该父级用作枢轴而不是通过脚本创建它)

3 - 如果门的GameObject中心位于其中心并且您无法更改它,您可以手动或使用MeshRenderer.bounds计算它。

答案 2 :(得分:0)

有多种可能的解决方案。以下是我所知道的,按照我的偏好顺序:

  1. 您可以使用Transform.RotateAround()
  2. 您可以使用层次结构来旋转它,就像您正在做的那样。旋转“pivot”父级将产生“围绕枢轴旋转孩子”所需的效果。
  3. 您可以“手动”计算枢轴周围的旋转:
    • 如何:rotation * (vector - pivot) + pivot
    • 其中:
      • rotation = Quaternion代表您的轮换。
      • (vector - pivot)将您的对象置于“origin”以应用旋转(与使用层次结构方法的逻辑相同)。
      • + pivot =在旋转之后重新应用对象和枢轴之间的偏移量。
      • 重要提示:使用Quaternion进行轮换时,Quaternion应始终为第一个操作数( < / strong>执行此操作:(vector - pivot) * rotation)。
  4. 如果要创建3D网格,特别是在建模应用程序中,您只需在那里调整枢轴即可。
    • 奖励:在这种情况下,如果你的3D应用程序支持动画(你可能会这样做),你甚至可以在那里进行打开/关闭动画。
  5. 无论3D模型的支点如何,您都可以使用(Unity)动画。