我想知道动画系统在《我的世界》中的运作方式。我觉得所有小怪都是硬编码到游戏中的。刻痕真的坐在那里,用手为所有动画骨骼创建矩阵吗?
我喜欢重新创建有趣的游戏,所以我想知道他是如何做到的。另外,如果他确实对它们进行了硬编码,还有更好的方法吗?
我想知道动画系统在《我的世界》中的运作方式。我觉得所有小怪都是硬编码到游戏中的。刻痕真的坐在那里,用手为所有动画骨骼创建矩阵吗?
我喜欢重新创建有趣的游戏,所以我想知道他是如何做到的。另外,如果他确实对它们进行了硬编码,还有更好的方法吗?
Answers:
正如其他人所说,是的,模型和动画都是硬编码的。如果您想了解如何完成此操作,请转到Minecraft Coder Pack Wiki。
该软件包的创建是为了帮助Mod创建者反编译,更改和重新编译Minecraft类。软件包随附的自述文件中包含说明。该程序包包含用于反编译,重新编译和重新混淆游戏和服务器的脚本。
您将要查看的类是:ModelBase,ModelBiped和ModelRenderer。
ModelBiped包含以下用于执行人形动画的函数:
public void render(Entity entity, float time, float f1, ...)
{
setRotationAngles(time, f1, ...);
...
}
public void setRotationAngles(float time, float f1, ...)
{
...
bipedRightArm.rotateAngleX = MathHelper.cos(time * 0.6662F + 3.141593F) * 2.0F * f1 * 0.5F;
bipedLeftArm.rotateAngleX = MathHelper.cos(time * 0.6662F) * 2.0F * f1 * 0.5F;
...
}
手臂摆动只是余弦功能。右臂被PI偏移,以使其沿相反方向摆动。
我希望能回答您的问题=)
如果您想了解有关如何实际修改Minecraft的更多信息,请查看以下问题:
Minecraft中的模型是硬编码的。没有块层次结构的概念(仅块列表)。这意味着动画要么按程序(非常基本的方式)完成,要么通过插值进行硬编码。
Minecraft模型的一些编辑器(例如Techne或FMCModeler)允许导入/导出Mod的Minecraft模型代码,但它们不支持动画,因为每种模型的处理方式可能不同。
这是使用FMCModeler生成的快速示例:
//variables init:
public ModelRenderer box;
//constructor:
box = new ModelRenderer(0, 0);
box.addBox(0F, 0F, 0F, 16, 16, 16);
//render:
box.render(f5);
更好的方法是使用一些块层次结构概念构建一个基于块的完整建模器,以便您可以使用关键帧和插值对模型进行动画处理。
我目前正在构建一个可以完成此任务的多人游戏构建工具(以及其他工具,http://craftstud.io/)。它已经可以构建复杂的静态纹理模型,并且还在开发中。
这是一个用CraftStudio构建的复杂模型,如您所见,这些块在右侧的树中排列:
每个块通过以下数据序列化到网络上的磁盘/:
我计划通过存储以动画名称作为关键点和关键帧列表作为值的地图来添加动画支持。每个关键帧将与一个块和一个动画值相关联。在关键帧之间,应插值(线性表示位置,球形表示角度,搜索lerp和slerp)。