Unity3d Unity transform.position始终(0,0,0)用于对象表单obj导入

Unity3d Unity transform.position始终(0,0,0)用于对象表单obj导入,unity3d,Unity3d,我最近一直在处理一个导入的obj文件 导入编辑器时,所有对象都显示在正确的位置,但其位置为(0,0,0) 每当我在对象上循环并将transform.position写入文件时,每个对象都被设置为(0,0,0) 为了检查,我使用了父对象transformPosition,它返回了相同的结果 如有任何想法,将不胜感激 谢谢 编辑:刚刚被问到。问题是他们不应该什么都返回0,他们在世界各地 rangeObjs = GameObject.Find("firing_range").GetComponents

我最近一直在处理一个导入的obj文件

导入编辑器时,所有对象都显示在正确的位置,但其位置为(0,0,0)

每当我在对象上循环并将
transform.position
写入文件时,每个对象都被设置为(0,0,0)

为了检查,我使用了父对象transformPosition,它返回了相同的结果

如有任何想法,将不胜感激

谢谢

编辑:刚刚被问到。问题是他们不应该什么都返回0,他们在世界各地

rangeObjs = GameObject.Find("firing_range").GetComponentsInChildren<MeshFilter>();
for(int i = 0; i < rangeObjs.Length; i++){
    Debug.Log(rangeObjs[i].transform.position.ToString());
}
rangeObjs=GameObject.Find(“射击范围”).GetComponentsInChildren();
for(int i=0;i
您是否尝试检查对象的localPosition?(相对于对象的位置)

i、 e.代替

foreach(Transform t in group){
  print(t.position)
}
使用


好的,看来你们的模型轴心被转换成了根变换的中心

这要么是您的模型有错误的轴,要么是unity中的bug将每个轴转换为根(0,0,0)

请在其他3d建模软件(如blender)中打开obj,查看枢轴是否处于零位

请在3d建模软件中修复轴

如果没有,那么您可以尝试将其导出为不同的格式,例如FBX(推荐),并尝试将其导入unity

但是,如果你想要一种巧妙的方式。 您可以使您的MeshFilter游戏对象成为具有正确轴心位置的某个父对象的子对象,您可以创建一个空游戏对象来为其创建新轴心

编辑

还可以在unity编辑器中进行检查,选择包含MeshFilter的子对象,并在检查器中查看对象的位置


不同的绑定位置并不意味着轴在那里,网格可能在其他地方,但不能保证轴在网格的相同位置

好的,很好。你有什么问题?@draco18他们不应该都在0,0,0。它们都在不同的位置。@CBusBus您能显示您的代码吗?也许还有一些屏幕截图,它是如何在scene@endrikexe我已经添加了导致问题的代码。它适用于其他模型,没有问题。我从父级尝试了localPosition和TransformPoint。都没有返回不同的结果。。。现在我可以看到你们的代码了,你们不应该检查GameObject.Find(“射击范围”)子项的变换位置吗。你似乎在检查每个变换的网格过滤器组件的位置,而不是实际的子变换本身。我也检查了游戏对象,这是我最后检查的。对不起,应该加上,我一直在检查位置,localPosition和TransformPoint(位置)。感谢您的回复。编辑器显示的是相同的零值,所以我认为关于轴点,您一定是对的。有没有一种方法可以在不生成新模型的情况下解决此问题?“但是,如果你想采用这种棘手的方法。你可以使你的MeshFilter游戏对象成为某个具有正确轴心位置的父对象的子对象,你可以制作一个空的游戏对象来为其创建新轴心。”步骤右键单击你的游戏对象根,然后选择create Empty,然后将其定位到与您的MeshFilter对应的正确位置,然后使您的Mesh Filter游戏对象成为新的空游戏对象的子对象,将其拖放到空游戏对象。循环代码应如下所示:“rangeObjs=gameObject.Find”(“Fireing_range”)。transform;foreach(rangeObjs中的transformt){Debug.Log(t.position);}对不起,我的意思是有没有办法从现有的轴心点计算出它们的位置?我不确定循环,我需要知道它们连接到什么对象,所以我使用了网格过滤器,本来可以使用游戏对象,但更方便。惰性猜测。您可以使用Renderer.bounds获取网格中心点,但这不是轴,这只是另一种获取网格中心的方法。上面的代码是您代码的修改版本,因为我们不再使用MeshFilter pivot,因为我们使用的是没有MeshFilter的空游戏对象。这里有一个如何获得网格中心的参考
foreach(Transform t in group){
  print(t.localPosition)
}