来自我们的猫咪破坏游戏的一个小Unity陷阱,希望能帮别人省下一个晚上的时间。
裂纹的工作原理:当一个物品受到撞击时,我们会为其渲染器额外添加一种材质,即一种最多可容纳12个碎裂点的裂纹着色器。当渲染器的材质数量超过其网格的子网格数量时,Unity会再次将多余的材质绘制到最后一个子网格上。在物品自身的网格上,这会将裂纹直接放置在物品表面。
问题所在:我们的房间是程序生成的,每个房间还会附带一个阴影外壳——开放侧面的隐形墙壁加上天花板,仅渲染阴影,这样阳光只能从窗户射入。开启静态批处理后,这些部件被合并成一个组合网格,其最后一个子网格正是那个外壳。因此,本应绘制在家具上的裂纹,最终被绘制在了隐形天花板和开放侧面上。
修复方案:我们的MarkStatic助手会设置除BatchingStatic之外的所有静态标志。SRP批处理器已经为我们完成了绘制调用的工作,所以故意保持静态批处理关闭。
结论:如果你在运行时添加材质槽,请确保这些渲染器不参与静态批处理。
评论 (0)