用涟漪、风与碰撞打造沉浸式自然交互体验

04/1426 浏览综合
关于这个游戏最初的灵感,是我在河边看到叶子在水面飘动,风带来了涟漪,丢下的小石头也泛起圈圈涟漪,叶子在涟漪中漂流,一切宁静而美好,我也想将这个感受用游戏表现出来。在Gamejam开发的24小时内,我花了很长时间调整涟漪和叶片之间的交互效果,现在也将心得分享出来~希望能帮助到大家。
horizontal linehorizontal line
一、涟漪系统:让每一次触碰都有回响
涟漪是这个游戏最核心的交互手段。 玩家通过点按,长按屏幕以及滑动屏幕制造水面波纹,推动叶子前进。 要让涟漪看起来真实且手感舒适,关键在于力度感知视觉层次两个方面。
1.力度感知:长按蓄力 vs 快速滑动
涟漪的力度不是固定的,而是根据玩家操作动态计算。
点按涟漪:按住时间越长,力度越大,波纹越大。
力度 = 基础力度300 + 按住比例 × (最大力度1200 - 300)
波纹半径 = 最大半径200 × (0.5 + 按住比例 × 0.5)
这意味着轻点一下只产生小波纹(半径100,力度300),而按住一秒再松手则会产生覆盖范围翻倍、力度4倍的大波纹。 玩家可以直觉地感受到"蓄力"的过程。
滑动涟漪:滑动速度越快,推力越猛。滑动涟漪不是圆形的,而是沿着手指轨迹形成一条"风带"。力度沿着手指方向逐渐衰减,垂直方向也有衰减范围。这模拟了手划过水面产生的线状波纹。
速度因子 = min(滑动速度 / 500, 1.0)
力度 = 基础力度200 + 速度因子 × (最大力度1500 - 200)
Prompt参考:我最开始是先概述了一下想要实现的效果,先让tapmaker来尝试生成,再在预览界面继续修改以达到目标的手感和效果。例如最初生成的涟漪圈数太少,推力也很小,后续可以一步步调整至你想要的效果。
TapTap
初始prompt
TapTap
后续修改等prompt
2.视觉层次:不同涟漪的差异化表现
圆形涟漪不是简单画一个圆,而是画5个同心圆环叠加:
TapTap
圆形涟漪
间距分布 = (i / 5)²  → 内密外疏(0.04, 0.16, 0.36, 0.64, 1.0)
亮度分布 = 内亮外暗(100% → 25%)
线宽分布 = 内粗外细(2.2 → 1.0)
颜色渐变 = 内偏白蓝(170,208,239) → 外偏亮白(210,240,255)
间距分布是关键 —— 它让内圈紧密、外圈稀疏,模拟了真实水波内密外疏的特征。每个圆环的颜色也略有不同,整体呈现出从中心的深蓝到外围的浅白色渐变。
Prompt参考:水面涟漪特写,5个同心圆环,内圈粗且亮,外圈细且淡,蓝白色调,深色水面背景,清新自然风格滑动涟漪则用贝塞尔曲线渲染出弧形的风线效果,通过手指轨迹的叉积自动判断弯曲方向,产生2条平行的弧线(一粗一细),模拟风掠过水面的视觉效果。
TapTap
模拟风的轨迹
Prompt参考:水面上两条弧形波纹线,一粗一细,浅蓝色,像风掠过水面的轨迹,深色水面背景圆形涟漪一开始生成的总体方向是我满意的,但是滑动的涟漪效果不太好,后续修改也不够满意,因此滑动涟漪我后续修改成【风】的表现形式,毕竟最初就是想模拟风的效果,用【风带】也代替【条状涟漪】,也达到了最初的目标,也避免了太多涟漪线条堆叠导致画面太乱的情形。
TapTap
修改条状涟漪
horizontal linehorizontal line
二、碰撞系统:有代价的物理反馈
石头是游戏里的主要障碍物和挑战,因此叶子撞到石头需要给玩家传达出受损,危险的信号。碰撞效果需要同时满足物理真实感和游戏性反馈。
石头碰撞:反射+阻尼+旋转。碰撞检测使用简单的圆形判定(叶子半径 + 石头半径),碰到后的处理分为三步:
  1. 位置修正:将叶子推出石头,避免穿模
  2. 速度反射:沿法线方向做镜面反射,然后乘以0.6阻尼系数
  3. 角速度扰动:随机添加旋转(±1.5 rad/s),模拟碰撞后的翻转
TapTap
碰撞前效果
TapTap
碰撞后效果(红色受损效果)
2