ながつきぶろぐ

Unityのこととかゲームのこととか書けたらよいなブログ。

「Shader Forge」をUnity2018.1.2のAndroidでビルドしたらなんかハマった話

6月の「ひよこバトル」のブラッシュアップフェーズでついでにUnityのバージョンを2018.2 2018.1.2に変えたのですが、
その際に「Shader Forge」でハマったことを書いておきます。
いやーシェーダー作ってから気づくまでがちょっと遅すぎた

実質下の記事の続きになります。
nagatuki.hateblo.jp

①読み込み時になんかエラーが出る

インポートが走る度に下のエラーが出ていました。
めんどくさいなーって思って放置してたけど、いかんかったぽい

TypeLoadException: Could not load type 'UnityEngine.ProceduralMaterial' from assembly 'UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'. Unloading broken assembly Assets/ShaderForge/Editor/ShaderForge.dll, this assembly can cause crashes in the runtime

解決方法

原因と解決方法は以下に書いておりました。 まるっと対応でOKです。 qiita.com

Androidビルドをするとなんかエラーが出る

Androidで動作確認しようとビルドをした際、シェーダーのソースで以下のエラーが出てきました。
※エラー内容はシェーダーの内容によって違うっぽいです

'UNITY_PASS_FORWARDBASE' already defined at line 52 (on gles) 'UNITY_PASS_SHADOWCASTER' already defined at line 112 (on gles)

解決方法

単純に多重定義なので、定義されてなければ定義するように変えました。 f:id:nagatuki_elv:20180709222755p:plain

f:id:nagatuki_elv:20180709222636p:plain

こうして無事エラーなくビルドが通ったのです…が…。

③なんか点滅シェーダーが動かない

f:id:nagatuki_elv:20180709215001g:plain

なぜかAndroid実機で点滅シェーダーが動きません。
(ハートのアウトラインシェーダーは並べてみているだけでShader Forge製ではありません)

解決方法

どうやらグラフィックAPIのOpenGLES3が悪さしてたみたいです。細かい原因は知らん f:id:nagatuki_elv:20180709215557p:plain

だいたいここがAutoになっているのでチェックを外して、

f:id:nagatuki_elv:20180709220036p:plain

「OpenGLES3」を選択して「-」を押します。

f:id:nagatuki_elv:20180709220137p:plain

f:id:nagatuki_elv:20180709215359g:plain

動いた!
これで一旦解決としましょう!

「Shader Graph」に移行しないの?

Unity2018のどこかから公式ツールとして追加されたらしいShader Graph。
Shader Forgeと同じくノードベースでシェーダーが書ける便利なツールなのですが、
結論から言うとしません。

めんどくさいそもそもShader Graphのことよくわかっていないのと、
2Dが対応してるのか情報が少なくて調べられない分からないで挫折しました…。
もうちょっと情報が来たら考えますが、現状このままでいきます。