如何围绕他的枢轴而不是他的中心旋转 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。通过 instance
、instance id
或 tag
进行比较。在您的情况下,tag
是合适的。
在编辑器中创建一个新标签并将其命名为Engine。 Select 所有 Engine 模型部件然后将其 tags
更改为 Engine。现在,您可以使用下面的代码,它更高效且不分配内存。
if (child.CompareTag("Engine"))
{
child.Rotate(new Vector3(0, 30, 0) * Time.deltaTime * 100, Space.Self);
}
我的目标是旋转飞机的引擎。
我的飞机有 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。通过 instance
、instance id
或 tag
进行比较。在您的情况下,tag
是合适的。
在编辑器中创建一个新标签并将其命名为Engine。 Select 所有 Engine 模型部件然后将其 tags
更改为 Engine。现在,您可以使用下面的代码,它更高效且不分配内存。
if (child.CompareTag("Engine"))
{
child.Rotate(new Vector3(0, 30, 0) * Time.deltaTime * 100, Space.Self);
}