1.モックアップに近いものが必要な場合は、パーティクルを使用します(完全にブローされたパーティクルシステムである必要はありません)。
RenderTextureでポリゴンの形でパーティクルをレンダリングします。必ず粒子に添加剤のブレンドを使用してください。ポリゴンの内側のパーティクルは互いにスムーズにブレンドされ、外側のパーティクルは必要なソフトエッジを提供します。(エフェクトの例は、このyoutubeビデオで見ることができます:Additive Particles Video
これで、RenderTextureがメイン画面にレンダリングされ、完了です。RenderTextureは、パーティクルが背景と混ざらないようにするために必要です。
三角形をパーティクルテクスチャに直接配置して、これがどのように機能するかを確認できます。それ以外の場合は、「パーティクルスープ」の上に別のレイヤーとしてレンダリングします。
このように見える更新されたjsfiddleで簡単なモックアップを作成しました。更新
されたデモはここで見つけることができます
2.各パーティクルには速度と原点があります。プレイヤーがポリゴンに触れると、プレイヤーの速度に比例して各パーティクルの速度が変化します。パーティクルがプレイヤーから離れるほど、プレイヤーの速度による影響は少なくなります。
粒子の速度を計算する式は次のようになります。
//player.velocity and particle.velocity are vectors
//k is a factor to enhance or weaken the influence of players velocity
var distanceToPlayer = (player.position - particle.position).length();
particle.velocity = particle.velocity + ((k * player.velocity) + particle.velocity) * (1/distanceToPlayer);
パーティクルの位置を計算するには、これを更新メソッドに入れます:
var speedY = -(springConstant * (particle.position.y - particle.origin.y)) - (dampingFactor * particle.velocity.y);
var speedX = -(springConstant * (particle.position.x - particle.origin.x)) - (dampingFactor * particle.velocity.x);
particle.position.y = particle.position.y + speedY;
particle.position.x = particle.position.x + speedX;
particle.velocity.x = particle.velocity.x + speedX;
particle.velocity.y = particle.velocity.y + speedY;
これにより、プレイヤーが流体を攪拌したときに各パーティクルがその原点を中心に揺れる「流体」が得られます。springConstantは、パーティクルがその原点からどれだけ離れてスイングするかを変更し、dampingFactorは、パーティクルが静止する速度を変更します。ゲームで使用している1dシミュレーションの修正バージョン以降、コードを調整する必要がある場合があります。
デモがあります:デモ
流体が希望どおりに動作するまで、上部の3つの定数を微調整します。