Java LibGDX-未知动画错误

Java LibGDX-未知动画错误,java,animation,3d,libgdx,blender,Java,Animation,3d,Libgdx,Blender,我正在libgdx上开发一个应用程序,我正在尝试播放我在Blender上创建的动画,但我仍然会遇到未知的动画错误。我在我的创建方法中有以下代码: model=modelLoader.loadModel(Gdx.files.getFileHandle(“i1.g3db”,FileType.Internal)); modelInstance=新的modelInstance(模型); modelInstance.transform.rotate(1,0,0,-90); modelInstance.tr

我正在libgdx上开发一个应用程序,我正在尝试播放我在Blender上创建的动画,但我仍然会遇到未知的动画错误。我在我的创建方法中有以下代码:

model=modelLoader.loadModel(Gdx.files.getFileHandle(“i1.g3db”,FileType.Internal));
modelInstance=新的modelInstance(模型);
modelInstance.transform.rotate(1,0,0,-90);
modelInstance.transform.translate(0,0,-2);
控制器=新的AnimationController(modelInstance);
控制器。设置动画(“移动手”,1);
在我的渲染方法中:

camera.update();
camController.update();
controller.update(Gdx.graphics.getDeltaTime());
modelBatch.begin(摄像机);
render(modelInstance,environment);
modelBatch.end();
我试图删掉与问题无关的部分。下面是Blender中dopesheet的一张图片,显示我已正确命名动画:

任何人都知道可能是什么问题,因为我已经在这个问题上坚持了很长一段时间,谢谢!如果有人想打开动画文件(.g3db、.blender),我会将它们上传到这里:


一般注意:避免在动画名称中使用大写字母(和空格等)。另外,请查看有关动画的更多信息以及有关在LibGDX中使用混合器模型的信息

使用
fbx conv
-o g3dj
命令行选项将文件转换为.g3dj,例如
fbx conv-f-o g3dj i1.fbx
(其中
-f
用于翻转纹理坐标)。确保更新代码以使用此G3DJ文件而不是以前的G3DB文件。接下来,使用文本编辑器(例如记事本或ide/eclipse的文本编辑器)打开生成的.g3dj文件。该文件应易于阅读(有关如何阅读的更多信息,请参阅),并包含一个名为
动画
的部分(json键)

如果文件中没有动画,它应该看起来像文件底部的
“animations”:[]
。在这种情况下,请确保选中以在blender中导出动画。另见:

如果文件中有动画,它们将包含在数组中(在
动画“:[
]
之间)。注意动画可以占用很多空间,所以实际的行<代码>动画([/cord])可能位于文件中间某处。在这种情况下,确保动画的名称(<代码> ID >代码>与用于指定动画的字符串完全匹配。

如果文件中包含动画且字符串匹配,则枚举模型/模型实例中的所有动画以确保正确加载:

for (Animation anim : modelInstance.animations)
    Gdx.app.log("Animation", anim.id);

如果动画未包含在ModelInstance中,请将此片段中的
ModelInstance
替换为
model
,以确保它包含在模型中。如果它也未包含在模型中,请确保刷新/清理您的工作区。

Hi Xoppa,非常感谢您的详细回复!我将模型转换为g3dj,我可以现在查看文件底部的动画。但是,当我尝试运行它时,我得到一个“错误解析文件:com.badlogic.gdx.utils.UBJsonReader.parse(UBJsonReader.java:47)”错误;我应该使用与之前g3db相同的代码导入文件吗?如果您不使用AssetManager(我建议您使用),您必须为G3DJ文件指定JsonReader(而不是为G3DB文件指定UBJsonReader)。例如,
new G3dModelLoader(new JsonReader(),resolver)
。请参阅如何使用AssetManager加载。我实现了AssetManager,它现在显示模型,但当我添加“controller.update(Gdx.graphics.getDeltaTime())”第行返回空指针异常。我这里有代码:我缺少什么吗?检查控制器是否为空,例如,
if(controller!=null)controller.update(Gdx.graphics.getDeltaTime());