在统一脚本中,如何围绕枢轴位置“旋转”和“旋转至”

时间:2018-10-10 09:46:57

标签: c# unity3d

在统一编辑器中,当我启用“枢轴”时,游戏对象将围绕“枢轴点”位置旋转,当我启用“中枢”时,游戏对象将围绕“中心点”旋转

但是如果我使用脚本旋转,它将始终围绕“中心点”旋转,例如,这是我的场景:

enter image description here

我使用以下代码:

    void Start()
    {
//        transform.rotation = Quaternion.Euler(new Vector3(0, 0, 90));
        transform.RotateAround(transform.position, new Vector3(0, 0, 1), 90);
    }

围绕“中心点”旋转

enter image description here

如果对象具有对撞机,我可以通过colider.bounds获取枢轴点,如果没有,我该怎么办?

更糟糕的是,在某些情况下,我希望旋转为就像在统一编辑器检查器中设置旋转一样,我使用以下代码:

transform.rotation = Quaternion.Euler(new Vector3(0, 0, 90))

我不知道要调整上面的代码以绕枢轴点旋转

更新

我认为,如果我可以“旋转”,也可以暗示“旋转到”,那么关键是,我应该如何获取RotateAround中使用的“枢轴点”,以使对象具有对撞机,我可以colider.bounds与transform.position绑定,没有碰撞对象,该怎么办?

1 个答案:

答案 0 :(得分:3)

枢轴点与您正在使用的transform.position相同。如果您不喜欢枢轴的位置或旋转所针对的位置,则有两种选择:

1 。创建新的空GameObject。将其移动到您要GameObject旋转的位置。一旦对该位置感到满意,请将这个新的GameObject设为您将要旋转的GameObject的子代。使用此新GameObject的位置作为transform.RotateAround函数的枢轴旋转点。

将空的GameObject拖到下面脚本中的customPivot插槽中。那应该给您一个新的枢轴点来旋转您的GameObject。

public Transform customPivot;

void Update()
{
    transform.RotateAround(customPivot.position, Vector3.up, 20 * Time.deltaTime);
}

2 。打开3D应用程序并更改对象的轴心点,然后保存并将其重新导入到Unity中。

由于这只是用于旋转对象,因此建议#1 。如果问题是枢轴点未居中,则建议使用#2