まきゼミ技事録!

とあるゼミのプログラマー達が送る技術ブログのようなもの

オレオレシェーダによるマテリアルを使用してパーティクルエフェクトを作る話

どうも、ぴょんさんです。

今回は、自分で書いたシェーダのマテリアルをパーティクルのマテリアルとして使用した際に、「Shuriken」から色を変える方法がわからず半日ほど潰したため、その方法をメモとしてまとめます。

 

環境

  • Unity2017.4.0f1(いつもの)

 

沼の始まり

f:id:MakiZemi:20181019193306g:plain

上の図のパーティクルはどちらも以下のように「Color over Lifetime」を設定しています。

f:id:MakiZemi:20181019194154p:plain

見てわかる通り、Beforeのほうは色も透明度も変わっていません。この時点で、シェーダのほうに何らかのことをしなければならないということがわかりました。

シェーダ側で時間経過で色が変わる処理を書くこともできますが、それをするとパーティクル全ての色が同時に変化してしまい、Afterの様にグラデーションを描くことはできません。

 

沼の終わり

いろいろと調べたり試行錯誤したりした結果、ようやく色を変更できるようになりました。

まずはソースから↓

StandardSurfaceShaderを作成し、少し改造したものになります。

 

重要なのは20行目です。

struct Input

{

    float2 uv_MainTex;

    float4 color : COLOR;

}; 

 デフォルトだと、Inputはuv_MainTexしかありません。しかし、colorを付け足すことにより、「Shuriken」の色を変更するモジュールから値を受け取れるようになります。これにより、上図のAfterのように色を変えながら、徐々に透明になっていくエフェクトを作成できるようになりました。

 

参考

docs.unity3d.com

 

おわり( ゚Д゚)