Godot 2D雨滴碰撞水花教程从发射到溅起水花的3个阶段【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot这篇教程用 Godot 的 GPUParticles2D 配合 ParticleProcessMaterial 搭一套 2D 雨天系统雨从屏幕顶部落下被地面碰撞层挡住接触点弹出扇形水花。全程只用 2 个粒子节点做完即可得到一个能跑的雨天场景同一套参数也能直接改出瀑布和落雪效果。效果分层一个雨天只有3层层作用对应节点实现难度雨滴层从屏幕顶部匀速密集下落GPUParticles2D 主发射器低碰撞层让雨碰到地面时停下或消失StaticBody2D CollisionShape2D中水花反馈层在碰撞点弹出小水花GPUParticles2D 次级发射器中第一层决定像不像雨后两层决定雨砸在地上这个感觉成不成立。主雨为什么不用 CPUParticles2D维度CPUParticles2DGPUParticles2D计算位置CPU 逐帧GPU 并行舒适粒子规模几百到一千数千以上2D 碰撞无内置需自己检测内置 collision_mask / collision_mode直连物理层适用场景小范围特效、低配设备雨、雪、火焰等持续性天气效果雨这种效果粒子量大且必须做碰撞主雨选 GPUParticles2DCPUParticles2D 只适合粒子数少于一百、又不需要碰撞的小特效。让雨下起来并溅起水花的3个阶段 ️阶段1先让雨从屏幕顶部落下目标雨以稳定密度从顶部落到底。操作场景里加一个 GPUParticles2D贴图换一张不超过 64px 的细长条给 process_material 赋一个 ParticleProcessMaterial按表填参数参数值作用amount800同屏存活粒子数lifetime1.2下落时长要能覆盖屏幕高度emission_shapeRECTANGLE从一条横线发射emission_rect_extents(640, 0)发射区半宽覆盖全屏linear_accel(0, 400)向下的恒定加速度验收雨从顶部落到底、密度均匀看到雨在中途断掉就是 lifetime 太短。阶段2让雨落得下去目标雨被地面挡住不穿透。操作地面放一个 StaticBody2D挂上 CollisionShape2D物理图层勾第 1 层然后在主雨材质上开启碰撞下面三行是核心# 主雨发射器的 ParticleProcessMaterial mat.collision_mode ParticleProcessMaterial.COLLISION_MODE_RIGID # RIGID 反弹HIDE_ON_CONTACT 则碰触即消失 mat.collision_mask 1 # 只检测第 1 层 mat.collision_margin 2.0 # 提前一点触发避免贴地穿透验收雨碰到地面立刻被挡轻微弹跳不会穿过地面 y 坐标。阶段3碰撞时弹出水花目标每个碰撞点播放一次短水花。操作加一个名为 Splash 的 GPUParticles2D 作为兄弟节点one_shot 设 true、amount 设 12、lifetime 设 0.4、radial_velocity 设 60~120再把主雨材质指向它rain.process_material.sub_emitter ^Splash # 次级发射器节点路径 rain.process_material.sub_emitter_mode \ ParticleProcessMaterial.SUB_EMITTER_AT_COLLISION # 碰撞瞬间发射验收雨落地瞬间在接触点弹出扇形水花水花一次播放后即结束不在同一处堆积。参数速查效果不对时先改哪个值参数推荐值作用调大或调小会发生什么amount800雨密度调大更密但更吃性能调小变稀疏lifetime1.2下落时长调短雨半空断裂调长屏幕底部堆积linear_accel Y400下落速度调大像暴雨调小像细雨collision_margin2.0碰撞触发距离调小雨贴地调大提前弹起Splash radial_velocity60~120水花扩散力度调大水花乱飞显假amount_ratio1.0总密度缩放远景层设 0.5 直接减半水花不出现或雨穿透地面时先查这里雨落下但不接触地面—— 原因地面碰撞层和材质的 collision_mask 没对上。解决两边都勾第 1 层后重跑。水花不出现—— 原因sub_emitter 节点路径写错或 mode 没设成 AT_COLLISION。解决用 ^Splash 指向同父节点下的水花节点。雨显平、没有纵深—— 原因所有粒子尺寸一致。解决scale 的 min/max 设 0.6/1.4并用曲线在生命末期压低透明度。大场景帧率下降—— 原因存活粒子总数超预算。解决主雨控制在 3000 内远景层用 amount_ratio 降到 0.5。改参数就是雪和瀑布这套结构是个参数模板贴图换成雪花、linear_accel 改 (0, 30)、amount 降到 200就是落雪把碰撞形状换成崖壁雨就变瀑布。完整属性清单可查项目里 scene/2d 的 2D 粒子源码类说明见 Godot Engine 官方仓库 README。【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考