unity3D雨雪等粒子特效不穿透房屋效果实现(粒子不穿透模型)
做项目有时候会做天气模拟,模拟雨雪天气等等。但是容易忽略一个问题,就是房屋内不应该下雨或者下雪,这样不就穿帮了嘛。
下面就粒子穿透物体问题做一个demo。
正常下雨下雪在室内的话,你可以看到,粒子是穿透建筑的。
那要怎么模拟真实的雨雪天气,不让粒子穿透房屋建筑呢?
一:设置建筑物
1.把房子的层级改成层(BuildingLayer),如下图所示
2.给房子加碰撞 BoxCollider或者MeshCollider都可以,按自己的需求选择添加即可。
二:设置粒子
拿下雪的粒子为例,按下面设置:
1.type:选择World
2.Dampen:抑制(0~1),选这个为1时(完全抑制),碰撞之后,阻止了粒子,可以使碰撞的粒子消失
3.Bounce:反弹(0~2),选完这个之后,可以让产生碰撞的粒子以某个角度反弹出去
4.Lifetime Loss:生命周期损失(0~1),碰撞之后让粒子损失百分比的生命周期,为1时(生命周期完全损失),可以使粒子消失
5.Min Kill Speed:最小清除速度,设置值越大,粒子发生碰撞之后被移除的速度越快,当达到某个值之后,可以近似碰撞之后立即消失
6.Collides With:可碰撞范围,设置可以与该粒子系统碰撞的层,这里我们选择之前添加的建筑层BuildingLayer
7.Collision Quality:碰撞质量,设置发生碰撞的碰撞概率大小,选项三项从上到下由高到低,越低碰撞到的概率就越低
8.Send Collision Messages:发送碰撞信息。
建筑物和粒子都设置完之后,就可以看到室外是鹅毛大雪,室内却没有雨雪的完美效果,如下图窗外飘雪~~:
拓展:
如果想看到粒子和建筑的碰撞信息,也很简单:
在建筑物上新建一个脚本如下图所示
运行查看控制台输出