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:发送碰撞信息。

建筑物和粒子都设置完之后,就可以看到室外是鹅毛大雪,室内却没有雨雪的完美效果,如下图窗外飘雪~~:

拓展:

如果想看到粒子和建筑的碰撞信息,也很简单:

在建筑物上新建一个脚本如下图所示

运行查看控制台输出

上一篇:年轻用户对Facebook的使用趋势分析