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

时间:2016-06-07 13:50:26

标签: c# unity3d rotation unityscript unity5

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

我的飞机有2个引擎,在我的层次结构中表示如下: Plane Hierarchy

如果我从检查员分析我的飞机,这是我在中心 /全局模式下获得的内容: Plane center global mode

这是 Pivot /全局模式: Plane pivot global mode

如果我尝试旋转我的引擎,结果如下: Rotate engine result

如您所见,我的引擎不是围绕其枢轴旋转,而是围绕其中心轴旋转。如何围绕其枢轴旋转?

我调用的代码使其旋转

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);
           }
}

2 个答案:

答案 0 :(得分:4)

3D模型的枢轴点不居中。由于您拥有3DSMax,因此最好将枢轴点置于3D软件中心,这样您就不需要创建新的虚拟GameOject作为中心点。观看AddHandler视频,了解如何使枢轴点居中。只需选择引擎,然后点击中心对象按钮。你应该对飞机的所有其他部分都一样。再次保存并重新导入Unity。

您的代码

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

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

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

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

答案 1 :(得分:1)

您创建一个空的游戏对象并将其放置在您想要旋转的位置。你想要旋转的东西,使那个空的游戏对象的孩子。现在旋转该游戏对象。

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

这将使对象旋转。