この記事でのバージョン
Unity 2019.4.0f1
はじめに
今回は3Dモデルの表面(メッシュ)に合わせてエフェクトを発生させるアセットMesh Effectsの紹介です!
のアセット、Mesh Effectsの紹介です!
Mesh Effects | Spells | Unity Asset Store |
イメージとしては以下のような感じ。
PCやモバイル、VRには対応していますが、2D(Sprite)には対応していません。
なお、記事中では以下のアセットを使っています。
Japanese Apartment | 3D Environments | Unity Asset Store |
Fennec | 3D Animals | Unity Asset Store |
基本的な使い方
まずPC_Demoというシーンで各エフェクトの確認が出来ます。
左上のメニューで操作し、エフェクトの色を変える事も可能です。
なお、中央上あたりにPrefab名が表示されています。
ちなみにPrefabはKriptoFX/MeshEffect/Prefabs/PC Effectsに入っています。
このPrefabをシーンに移動し、
Mesh Objectにエフェクトを発生させたいオブジェを登録し、Update Mesh Rendererを押せば設定完了。
ちなみにメッシュ表面にエフェクトを発生させるのはMeshEffectというオブジェクトなので、
それ以外は不要であれば削除しても大丈夫です。
実際に実行してみると以下のような感じで、本の表面にエフェクトが発生してるのが分かると思います。
なお、SkinnedMeshRendererでも問題なく使えます。
ただし、メッシュが複数ある場合はそれぞれにエフェクトを設定する必要があります。
このエフェクト、どうやって実現しているのかといえば、Materialを追加しているだけだったりします。
なので、エフェクトを見た目を変更したい場合はこのMaterialを調整する感じになります。
ただし、マテリアルの名前はMeshEffectが含まれていないといけない点には注意が必要です。
ちなみにMesh EffectのIs First Materialを有効にすると、
元のMaterialに上書きする感じになります。
なお、サイズや色、有効かどうかのフラグや
切替時のフェード時間をInspector上から設定する事も可能です。
プログラムからの操作したい場合も使い方は基本的に同じで、
例えばResources直下にEffect6というPrefabがある時は、
以下のようにインスタンスを作成した後、(Skinned)MeshRendererが付いてるオブジェクトを
渡してUpdateMeshEffectを実行するだけでOK。
//メッシュエフェクトのPrefabからインスタンス作成 var meshRendererUpdater = Instantiate(Resources.Load<PSMeshRendererUpdater>("Effect6")); //MeshRendererが付いているオブジェクト(自身)を渡してエフェクト更新 meshRendererUpdater.UpdateMeshEffect(gameObject);
各種設定もInspectorに表示されるのと同じ感じで出来ます。
//切替時のフェード時間を0にする meshRendererUpdater.FadeTime = 0; //エフェクトを無効にする meshRendererUpdater.IsActive = false;