2Dの水をシミュレートしてみよう!Water 2Dの使い方

  Unity   ,




今回は、2Dの水をシミュレートするWater 2Dというアセットをご紹介します。先日アセットストアに登場した新作アセットです。

まずはパブリッシャーさんが公開している動画をご覧ください。

ゲームを開始すると水が出てくる。コライダーが設定してあるところにはぶつかる。水の色も変えられそう。などがわかると思います。

というわけで、Water 2Dについてさっそく見ていきましょう!

アセット概要

  • アセット:Water 2D
  • パブリッシャー:Apptouch
  • カテゴリー:ツール > エフェクト
  • 価格:無料
Water 2DはMetaballsを使用して各パーティクルをカメラの前にレンダリングし、RigidBody2Dの物理的特性を取得して物理的な動きや衝突をシミュレートします。

Metaballsを使って水を表現しているようです。

アセットの特徴

  • モバイルフレンドリー
  • CPUへの負荷が低い
  • 水の位置、速度、色を制御可能
  • UnityPro不要
  • コーディング知識不要

スマホでも快適に動くのは嬉しいポイントですね。

使用アプリ

Happy Glassというスマホアプリをご存知でしょうか? ツイッターなどでも話題になったアプリですが、Water 2Dが使われているようです。

Happy Glass

Happy Glass

Lion Studios無料posted withアプリーチ

このアプリも無料ですので気になる方はプレイしてみてください。

なお、Dig CavesWhere's My Water? というアプリにも使われているようですが、日本のストアでは見つかりませんでした。海外でしか公開されていないのかもしれませんので、 ご参考まで。

使い方

簡易的な使い方は、こちらの動画が参考になります。


動画では説明がありませんが、シーンにあるMain Cameraは使わないので削除してしまいましょう。

代わりにPrefabフォルダにある、Cameras、Water2D_Spawner、および、WaterDropプレハブをシーンに配置します。

prefabフォルダにある三つのプレハブをヒエラルキーウィンドウにドラッグしてシーンに配置します。


つぎに、Water2D_SpawnerのWater Drops ObjectsにWaterDropゲームオブジェクトをセットします。 要素0の箇所にドラッグ&ドロップしてください。

WaterDropゲームオブジェクトをセットします。この設定をしないと水は一切出ないので必須の設定です。

水を出すだけなら、これだけで設定は終わりです。

ゲームを開始すると自動的に水が出てきます。

設定項目

動画内では確認できなかったことを実際に使ってまとめてみました。水の勢いや、消えるまでの時間、水の色などが設定できます。

水の色や水量、向きなどの設定項目を見てみましょう。インスペクターの数値をいじるだけで簡単に変更することができます。

サイズ

サイズを設定するにはここのスライダーを動かすか右側の枠に直接数値を入力します。

水の粒子の大きさです。

サイズの設定を変更したときの比較です。数値を小さくするほど水が細くなり、大きくするほど太くなります。

左側の数値が0(最小)、右側が2(最大)です。

ただし、下の画像のようにサイズを小さくしすぎるとコライダーをすり抜けることがあるようです。

水のサイズを小さくしすぎるとコライダーをすり抜けることがあるようです。

具体的にいうと、サイズを0.1未満にするとすり抜けました。 サイズ0と0.1では水の見た目も変わらないため、最小値は0.1と考えたほうが良さそうです。

Life Time

水の生存時間を設定します。スライダーを動かすか直接数値を入力します。

水が消える(蒸発する?)までの時間です。

値が小さいと水はすぐに消え、値が大きいほど消えなくなります。

最小値が0、最大値が100です。

試しに数値を小さくしてみたところ、空中で消えてしまいました。 生存時間が短いので壁に当たる前に消えてしまいます。

逆に値を大きくすると、水はなかなか消えません。 生存時間が長いのでなかなか消えません。

なお、Life Timeを大きくすると新たに水が出なくますが、 これはWater Drops Objectsの要素で指定した数(80)以上のパーティクルが生成されないためです。 パーティクルが消えない限り、新しいパーティクルは生成されません。

Delay Between Particles

Delay Between Particlesの設定です

パーティクルのディレイを指定します。

最小値は0、最大値は1です。

値を小さくすると水は一気に放出され、値を大きくすると少しずつ出ます。

Delay Between Particlesの値が0場合 ディレイがないのであとから出てくる水の粒子は遅れることなく一気に出てきます。

Delay Between Particlesの値が1場合 ディレイが1秒あるので一秒に一滴ずつ水が出てきます。

Material & Color

マテリアルとカラーの設定です。

水の色を指定します。

Water Materialは一応いじってみたのですが、特に見た目に変化が起きませんでした。力不足により調査断念です……。

ですが色を変えるだけなら、Water Materialはいじらなくて大丈夫です。

自分の好きな色を設定できます。

Fill Colorが内側の色、Stroke Colorが外側の色です。

Init Speed

水の勢いと向きの設定です

放出される水の勢いと向きです。

小さくするほど弱く、大きくするほど強くなります。

X5:Y5の場合。水の勢いは弱いです。 弱々しい勢いで水がチョロチョロと出ています。

x30:y30の場合。一直線にどこかへ消えていきました。 ものすごい勢いで水が発射されました。

なお、Xの値をマイナスにすると左方向へ、Yの値をマイナスにすると下方向へ水が出ます。

Dynamic Changes

Dynamix changesを有効にするとサイズなどの動的な変更が可能になります。

チェックがついている場合は、サイズなどの動的な変更が可能になります。 チェックが外れている場合は、値を変えてもサイズなどが変わることはありません。

Help?

Help?ボタンを押すと、メーラーが起動して作者さんにメールを送ることができます。

任意の場所から水を出す

このように好きな場所から水を出す方法です。 消防士が持っているホースから水を出してみました。

上の方の説明と重なる部分があるので、文字だけですが……。

  1. 空のゲームオブジェクト(以下、親)を追加(名前は任意)
  2. 親の下にスプライト等(以下、子)を追加
  3. Water2d_Spawner、Coreスクリプトを親に追加
  4. Water2d_SpawnerのWater Drops Objectsのサイズを80(任意の数)に変更
  5. Water Drops Objectsの要素0にWaterDropゲームオブジェクトを追加
  6. Water MaterialにAlphaCutoutマテリアルを追加
  7. 子の位置を調整

空のゲームオブジェクトとスプライトを親子関係にすることで、水を出したい位置を簡単に調整することができます。

マウスクリックで水を弾く

黄色い丸はクリック中を意味しています。 消防士が持っているホースから水を出してみました。

(黄色い丸はUnityでの表示ではなく、Gifにした時に追加されたものです)

  1. 空のゲームオブジェクを追加(名前は任意)
  2. Scriptsフォルダに入っているMouseColliderControllerを追加
  3. 2Dサークルコライダーを追加

以上の設定でゲームを開始すると、マウスクリックで水を弾けるようになります。

対応しているコライダーは2Dサークルコライダーのみです。 これ以外のコライダーを追加した場合は、クリックしてもなにも反応しません。(スクリプトをいじれば当然できますが……)

気になる点

  1. 一箇所から水を出すのは簡単にできるのですが、複数箇所から水を出すことができませんでした。 単純にWater2D_Spawnerを増やしてみましたが、片方からしか水は出ません。

  2. ONOFFの制御がわかりませんでした。

あとがき

スクリプトは一切いじらずに使ってみましたが、色々と遊べて楽しかったです。 使い方がとても簡単で手軽に使えるのがいいですね。

コライダーを設定したゲームオブジェクトにはちゃんとぶつかりますので、 滝行みたいなことも簡単にできます(謎)

修行僧?にコライダーを設定して滝行させてみました

アイデアしだいで使い方は無限大!?なアセットですので、みなさんもぜひ使ってみてください。

ダウンロードはこちらからどうぞ。無料です!

素敵なアセットを公開してくれた作者様に感謝!!


関連ページ