(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]



3Dモデルの表面(メッシュ)にエフェクトを発生 Mesh Effects【Unity】【アセット】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2019.4.0f1


はじめに

今回は3Dモデルの表面(メッシュ)に合わせてエフェクトを発生させるアセットMesh Effectsの紹介です!

のアセット、Mesh Effectsの紹介です!

Mesh Effects | Spells | Unity Asset Store


イメージとしては以下のような感じ。

PCやモバイル、VRには対応していますが、2D(Sprite)には対応していません。

f:id:kan_kikuchi:20200618064015g:plain


なお、記事中では以下のアセットを使っています。

Japanese Apartment | 3D Environments | Unity Asset Store
Fennec | 3D Animals | Unity Asset Store



基本的な使い方

まずPC_Demoというシーンで各エフェクトの確認が出来ます。

f:id:kan_kikuchi:20200615073159j:plain


左上のメニューで操作し、エフェクトの色を変える事も可能です。

なお、中央上あたりにPrefab名が表示されています。

f:id:kan_kikuchi:20200615074255j:plain


ちなみにPrefabはKriptoFX/MeshEffect/Prefabs/PC Effectsに入っています。

f:id:kan_kikuchi:20200615074745j:plain


このPrefabをシーンに移動し、

f:id:kan_kikuchi:20200615080456j:plain


Mesh Objectにエフェクトを発生させたいオブジェを登録し、Update Mesh Rendererを押せば設定完了。

f:id:kan_kikuchi:20200618070155j:plain


ちなみにメッシュ表面にエフェクトを発生させるのはMeshEffectというオブジェクトなので、

それ以外は不要であれば削除しても大丈夫です。

f:id:kan_kikuchi:20200616083925j:plain


実際に実行してみると以下のような感じで、本の表面にエフェクトが発生してるのが分かると思います。

f:id:kan_kikuchi:20200616083942g:plain


なお、SkinnedMeshRendererでも問題なく使えます。

f:id:kan_kikuchi:20200618064015g:plain


ただし、メッシュが複数ある場合はそれぞれにエフェクトを設定する必要があります。

f:id:kan_kikuchi:20200616174830j:plain


このエフェクト、どうやって実現しているのかといえば、Materialを追加しているだけだったりします。

f:id:kan_kikuchi:20200617065941j:plain


なので、エフェクトを見た目を変更したい場合はこのMaterialを調整する感じになります。

ただし、マテリアルの名前はMeshEffectが含まれていないといけない点には注意が必要です。

f:id:kan_kikuchi:20200616174931j:plain


ちなみにMesh EffectのIs First Materialを有効にすると、

f:id:kan_kikuchi:20200617070940j:plain


元のMaterialに上書きする感じになります。

f:id:kan_kikuchi:20200617070951j:plain


なお、サイズや色有効かどうかのフラグ

切替時のフェード時間をInspector上から設定する事も可能です。

f:id:kan_kikuchi:20200617070110j:plain


プログラムからの操作したい場合も使い方は基本的に同じで、

例えばResources直下にEffect6というPrefabがある時は、

f:id:kan_kikuchi:20200617072354j:plain


以下のようにインスタンスを作成した後、(Skinned)MeshRendererが付いてるオブジェクトを

渡してUpdateMeshEffectを実行するだけでOK。

//メッシュエフェクトのPrefabからインスタンス作成
var meshRendererUpdater = Instantiate(Resources.Load<PSMeshRendererUpdater>("Effect6"));

//MeshRendererが付いているオブジェクト(自身)を渡してエフェクト更新
meshRendererUpdater.UpdateMeshEffect(gameObject);


各種設定もInspectorに表示されるのと同じ感じで出来ます。

//切替時のフェード時間を0にする
meshRendererUpdater.FadeTime = 0;

//エフェクトを無効にする
meshRendererUpdater.IsActive = false;