我试图做大约2天的事情是在运行时导入一个网格:http://wiki.unity3d.com/index.php?title=ObjImporter
我总共发现了3个进口商,一个是我必须支付的,一个可能是上面进口商的修改版本,也是我现在拥有的那个 .
要导入它我做:
ObjImporter objImporter = new ObjImporter();
Holder.ModelMesh = objImporter.ImportFile("./file.obj");
遗憾的是,我收到了这个错误:
IndexOutOfRangeException: Array index is out of range.
ObjImporter.populateMeshStruct (.meshStruct& mesh) (at Assets/OBJReader/ObjImporter.cs:218)
ObjImporter.ImportFile (System.String filePath) (at Assets/OBJReader/ObjImporter.cs:33)
哪个指向:
temp.z = System.Convert.ToInt32(brokenBrokenString[2]);
我完全不知道为什么会这样做...我不知道如何修复它,因为我没有写那个脚本,所以我请求一些帮助,说明为什么它不会按预期工作 .
Additional information: 我可以找到我尝试加载的文件,因为我可以在脚本中将名称更改为"file.b",它告诉我它无法加载,而当我放入.obj时它告诉我没有错误 . 我还尝试了另外两个也失败的文件 .
edit 我也试过评论那条线,并且结果很奇怪:模型在那里,但我有一些奇怪的形状跟着我的相机无缘无故......
2 回答
我也尝试让这个导入器工作 . 我在半小时之前得到了这个问题的帮助,所以我想我分享了 .
此导入器存在仅包含两个值的索引的问题 . 一个很好 . 三个很好 . 但是当您的索引区域包含面部索引(如f 5/1 6/2 2/3 1/4)时,导入器将失败并出现上述错误 .
你必须替换这个:
这样:
这解决了faceindex值的问题,它只包含两个值而不是一个或三个值 .
作为对口,你能不能告诉我你如何导入适合你的网格?因为我仍然坚持的是如何正确设置它以便它导入网格数据 . 维基很缺乏描述 . 现在错误信息已经消失,但仍然没有网格数据到达对象 . 我使用附加到带有网格过滤器的游戏对象的JS脚本 .
你似乎根本不使用meshfilter . 你究竟在做什么?你创建一个空,然后附加一个C#脚本?什么确切的脚本?怎么设置?脚本附在哪里?
编辑,没关系,找到了解决方案 .
我创建一个空的,添加一个网格过滤器,向它添加一个网格渲染器,然后在这里添加这个脚本,然后导入数据 . 太棒了:)
这是UnityJS,但该方法当然也适用于C#
作为解决方法,您还可以使用法线导出.obj文件 . 例如 . 在Blender中设置选项“Write Normals” . 虽然这也使我的测试文件大约1/3 .