如何围绕他的枢轴而不是他的中心旋转 GameObject?

How to rotate a GameObject around his pivot and not his center?

我的目标是旋转飞机的引擎

我的飞机有 2 个引擎,在我的层次结构中是这样表示的:

如果我从检查员分析我的飞机,这是我在中心/全局模式下得到的:

这里是 Pivot/Global 模式:

如果我尝试旋转引擎,结果如下:

如您所见,我的引擎不是围绕他的枢轴旋转,而是围绕他的中心轴旋转。我怎样才能让它绕着他的枢轴旋转?

我调用的让它旋转的代码 :

foreach(Transform child in planeId_Object_Dictionnary[newPlane.Flight].transform){

           if (child.name == "Engine"){
                     child.Rotate(new Vector3(0, 30, 0) * Time.deltaTime*100, Space.Self);
           }
}

您创建一个空游戏object并将其放置在您想要旋转的位置。你要旋转的东西,让那个空游戏childobject。现在旋转那个游戏 object。

transform.Rotate(new Vector3(0, 30, 0) * Time.deltaTime*100, Space.Self);

这将使 object 旋转。

3D 模型的枢轴点未居中。由于您有 3DSMax,最好将 3D 软件的枢轴点居中,这样您就不需要创建新的虚拟 GameOject 来用作中心点。观看 this 视频了解如何将轴心点居中。只需 select 引擎并单击 Center to Object 按钮。你应该对飞机的所有其他部分都一样。保存并再次将其重新导入到 Unity。

您的代码

if (child.name == "Engine")
{
    child.Rotate(new Vector3(0, 30, 0) * Time.deltaTime*100, Space.Self);
}

效率不高。不要按名称比较 GameObject。通过 instanceinstance idtag 进行比较。在您的情况下,tag 是合适的。

在编辑器中创建一个新标签并将其命名为Engine。 Select 所有 Engine 模型部件然后将其 tags 更改为 Engine。现在,您可以使用下面的代码,它更高效且不分配内存。

if (child.CompareTag("Engine"))
{
    child.Rotate(new Vector3(0, 30, 0) * Time.deltaTime * 100, Space.Self);
}