我的目标是旋转飞机的引擎。
如果我从检查员分析我的飞机,这是我在中心 /全局模式下获得的内容:
如您所见,我的引擎不是围绕其枢轴旋转,而是围绕其中心轴旋转。如何围绕其枢轴旋转?
我调用的代码使其旋转:
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);
}
}
答案 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。按instance
,instance id
或tag
进行比较。在您的情况下,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);
这将使对象旋转。