はじめに
WaterRippleForScreenはUnityで水の波紋を表現できるJose Hernandez氏作のアセットです。無料!!
リンクはこちら
ゲームを作成しているときに「水の波紋みたいなエフェクトできたらエモくね?」となったのですが、シェーダーの知識が全く無かったために自分で作成することができなかったのでアセットに頼ろうと調べていたときに見つけました。
このアセットに関して日本語で書かれた記事を発見できなかったので備忘録を兼ねてかいていきます。
利用方法
基本
アセットのインストール方法に関しては他の方がわかりやすく説明しているため、自分のプロジェクトにインポートできている前提で話をすすめます。
インポートすると、Assetsフォルダの中にWaterRippleForScreenというフォルダが作成されます。
まずは、WaterRippleForScreen/Scripts/に存在するRippleEffectsをエフェクトを適用したいCameraに貼り付けます。
背景の画像を適当に入れて、DetectClickにチェックを入れて実行し、ゲーム画面をクリックしてみてください(下の画像は見やすいようにWaveScaleを30にしています。)
このように水の波紋のような効果をかけられるのがこのアセットの効果です。
スクリプトから呼び出す場合は以下のようにします。
まず、忘れては行けないのが
usingWaterRippleForScreens;
今回はスペースキーの入力があったら波紋を呼び出すようにしていきます。
以下のスクリプトを適当なゲームオブジェクトにアタッチしてください。
usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingWaterRippleForScreens;publicclasshogehoge:MonoBehaviour{voidUpdate(){if(Input.GetKeyDown(KeyCode.Space)){Cameracam=Camera.main;Vector2target=newVector2(0,0);//Unity上の座標target=cam.WorldToScreenPoint(target);//カメラ座標に変換target.y=Screen.height-target.y;//WRFS用に座標を変換cam.GetComponent<RippleEffect>().SetNewRipplePosition(target);//新しい波紋を生成}}}
RippleEffectのSetNewRipplePositionに画面座標を上下反転させたものを渡すことで波紋を生み出せます。
(DetectClickモードでもクリックした箇所の上下反転に波紋が生み出されるので多分上下反転はバグだと思われます。)
エフェクトの調整
以下の変数はすべての波に対して適応されますのでご注意ください。波ごとに個別の設定を行うことはできませんでした。
もしかするとCameraに波の生成ごとにスクリプトからコンポーネントを追加して設定すればうまくいくかもしれません。(未検証)
DitectClick
はじめにも利用したクリックした座標(を上下反転させた座標)に波紋を生み出します。クリックを利用するプロジェクトではどこでも生み出されてしまうため、falseにしておくことをおすすめします。
WaveCount
画面に表示させる波の最大数
TimeInfinity
trueにすると画面にずっと波が表示され続けます。
WaveTime
そろぞれの波の時間が秒単位で設定できます。
WaveAnimCurve
時間経過に伴う波の挙動を決定します。0~1に収まるようにしないとおかしなことになります。
WaveScale
波の強度。ここが大きいと画面が大きく歪むようになります。
WaveScale
波の速度。
WaveFrequency
波の周波数。値が大きいほど波と波の感覚が狭まります。
CiecleXYScale
異なる値を設定することで波を楕円形にできます。
InternalRadio & ExternalRadio
画像はWaterRippleForScreenフォルダ内部に生成されるpdfよりお借りしております。
Internalの内部には波が生まれず、Internal以上Internal+External未満に波が表示され、それ以上には波が生まれません。
その他
RippleGeneratorというスクリプトも同梱されており、こちらでは自動で波を発生させられるらしい。
このエフェクトは画面に映るもの全てを歪ませてしまうため、少々使い勝手が悪そうなので今回はパスします。