关于PlanarShadow的实现相关文章很多,这里就不列举了。PlanarShadow有一个问题就是当模型本体全部移动到camera的视椎体外侧时,留在camera内的PlanarShadow会瞬间一起消失掉。如下图:
其实问题很明显,就是被Frustum Culling干掉了。解决方法也挺简单的,参考了这篇文章:
Disabling Frustum Culling on a Game Object in Unity « Allen Pestaluky: Blog
中心思想就是修改mesh的bounds使得模型移出视椎体时,bounds还在视椎体内.上面文章中的方法主要是为了debug方便,会使得模型永远不会被cull掉.我修改了一下,只是稍微把bounds扩大一些.代码如下
public float extend = 5f;
void Awake()
{
Mesh mesh = GetComponent<MeshFilter>().mesh;
Bounds bd = mesh.bounds;
bd.Expand(extend);
mesh.bounds = bd;
}
需要注意的是这里直接用mesh.bounds.Expand设置不生效,必须另存一份,不知道内部是怎么实现的。
挂上脚本以后结果如下:
问题解决.