この記事でのバージョン
Unity 2018.4.13f1
はじめに
WaterRWというUnityで使える2D水シェーダーが公開されたので、
今回はそれを試してみようという感じの記事です!
WebGLデモがこちらにあります。(WebGLはBurst非対応なのでパフォーマンスは落ちる)https://t.co/YJOyXbW8V5
— るっちょ / ruccho (@ruccho_vector) 2020年2月6日
なお、3Dで水の表現をしたい場合は以下のアセットがオススメです。
ちなみに、記事中では以下のアセットを使っています。(画像だけ)
Corgi Engine - 2D + 2.5D Platformer | Systems | Unity Asset Store |
導入
WaterRWにはBurstが使われているので、まずはその導入から。
Burstの導入にはお馴染みのPackage Managerを使います。
導入と言ってもInstallボタンを押すだけですが、
Burstはまだpreview版なので、AdvancedのShow preview packages
を有効にする必要がある点には注意が必要です。
あとはWaterRWのリリースページからWater-RW.unitypackageをダウンロードしてきて、
それをプロジェクトに展開するだけ。
とりあえずサンプルシーン(Sample.unity)を動かしてみると、
最初のツイートにもあったシーンで白い玉を自由に動かせます。
水に写ったような歪んだ反射も玉が跳ねた時の波も自然で最高ですね……!
使い方
WaterRWを自分のプロジェクトで使いたい場合はWater-RWというPrefabをシーンに配置するだけでOK。
Water-RWは普通のオブジェクトと同様に
位置やスケールを動かす事で水の場所や範囲を変更出来ます。
たったこれだけで、他のレンダラーが反射されますし、
当たり判定(Rigidbody2d+Collider2D)を持ったオブジェクトがぶつかれば、波を立てるようになります。
なおWater-RWについてるWater R Waverやマテリアルで各種設定も可能です。
なお、各設定の詳細についてはGitHubのReadmeを参照の事。
ちなみにWaterRWの計算は常に実行されているらしいので、
必要ない場合や画面外にある場合は無効にした方がよいそうです。
水の浮力等の表現
WaterRWはあくまで水の見た目の演出であって、水の浮力等を表現するものではないので、
そういう物を実装したい場合は以前紹介したBuoyancyEffector2Dを使うと良いかもしれません。
例えば、Water-RWにそのままBoxCollider2DとBuoyancyEffector2Dを付けてみると、
見た目も相まってかなり水らしい動きになります……!
おわりに
もの凄い簡単に使えて、しかも無料でここまでクオリティは
まさに神シェーダーと言った感じでした……!