保存一堆网格并使用它们在Unity3D中为角色设置动画



我试图一次在屏幕上绘制2000多个动画角色,问题是,在运行时蒙皮网格的成本太高。因此,我找到的解决方案是拍摄大量动画帧,然后在每帧为角色绘制适当的网格。

经过一些研究,我找到了几种可能的解决方案,但都没有成功使用,它们是:

  • 使用一个Animation组件,然后选择动画/时间帧并调用"Animation.Sample()",然后我就可以使用SkinnedMeshRenderer.BakeMesh(myMesh)。问题是,当使用Mechanim时,你有一个Animator组件而不是Animation,到目前为止,我唯一缺少的是使用Animator部件而不是动画,它等效于"Sample(()"。如果没有"Sample()"等效方法,我每次烘焙时得到的都是T姿势的网格

  • 在Update()方法中,有时在动画师中设置动画/时间帧,然后等待下一帧调用"SkinnedMeshRenderer.BakeMesh(myMesh)"会起作用。最大的问题是必须等待一整帧才能烘焙网格,更不用说它现在可能随时停止工作,因为这显然不是应该做的。我甚至不确定等待下一帧是否会改变动画的位置。

我也会接受任何其他解决方案,只要它使用Mechanim来制作动画

我不是这方面的专家,但。。。

你能不做那些大男孩所做的和"作弊"的事情吗?用同一个网格在不同状态下的实例化?

如果该网格有10种不同的"状态",那么基本上有10个不同的实例化绘制调用来渲染我所理解的数量几乎无限的它们。

这样,当你有能力处理如此大量的数据时,所有的负载都会从cpu和gpu之间的推送中移除,并保持在gpu上。

最新更新