【问题标题】:In unity script, how to "rotate" and "rotate to" around pivot position在统一脚本中,如何围绕枢轴位置“旋转”和“旋转到”
【发布时间】:2018-10-10 09:46:56
【问题描述】:

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

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

我使用以下代码:

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

它围绕“中心点”旋转

如果物体有碰撞器,我可以用 colider.bounds 获得轴心点,如果没有,我应该怎么做?

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

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

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

更新

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

【问题讨论】:

  • 围绕轴心点旋转相当于: 1. 平移对象,使对象的中心位于轴心点上(并记住相对于对象空间的平移 T) 2. 围绕中心旋转对象 3. 平移返回使用 T^-1(相对于对象空间)

标签: c# unity3d


【解决方案1】:

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

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

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

public Transform customPivot;

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

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

由于这只是用来旋转物体,我建议#1。如果问题是枢轴点未居中,我建议#2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-03
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多