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

chi*_*nce 3 c# unity-game-engine

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

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

在此处输入图片说明

我使用以下代码:

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

它围绕“中心点”旋转

在此处输入图片说明

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

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

transform.rotation = Quaternion.Euler(new Vector3(0, 0, 90))
Run Code Online (Sandbox Code Playgroud)

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

更新

我想如果我可以“旋转”,我也可以实现“旋转到”,所以关键是,我应该如何获得在 RotateAround 中使用的“枢轴点”,对象有碰撞器,我可以使用 colider.bounds使用transform.position,没有碰撞对象,我该怎么办?

Pro*_*mer 5

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

1 . 创建新的空游戏对象。将其移动到您希望 GameObject 旋转的位置。一旦对那个位置感到满意,就让这个新的 GameObject 成为你将围绕它旋转的 GameObject 的子级。使用这个新游戏对象的位置作为transform.RotateAround函数的枢轴旋转点。

将空的 GameObject 拖到customPivot下面脚本中的插槽中。这应该会给你一个新的枢轴点来旋转你的游戏对象。

public Transform customPivot;

void Update()
{
    transform.RotateAround(customPivot.position, Vector3.up, 20 * Time.deltaTime);
}
Run Code Online (Sandbox Code Playgroud)

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

由于这仅用于旋转对象,我建议#1。如果问题是枢轴点未居中,我建议#2