3Dオブジェクトを光らせるStandardのEMISSIONが効かないときの対処法

f:id:snoopopo:20210327110432p:plain

StandardのEMISSION

3Dオブジェクトを光らせる方法の1つに、ビルドインシェーダのStandardシェーダのEMISSIONを使う方法がある。 f:id:snoopopo:20210327110711p:plain

スクリプトからStandardのEMISSIONを切り替える方法

   public void SetEmission(bool emission, Color color)
    {
        r = box.GetComponent<MeshRenderer>();

        if (emission)
        {
            r.material.EnableKeyword("_EMISSION");
            r.material.SetColor("_EmissionColor", color);
        } else
        {
            r.material.DisableKeyword("_EMISSION");
        }
    }

上記のように、
一度EnableKeywordで「EMISSION」を有効にする必要にしてから、色を設定する。
EMISSION」を有効にしないと、いくら色をセットしても変わらないので注意!

エディタでは効くのに、android実機で効いていない場合

最初はEMISSIONを無効にしておいて、あとからスクリプトで有効にしたい場合に発生した。 対処方法は、Resouces側に、もともとEMISSIONを有効にしたマテリアルを配置しておくことで対処できる。

f:id:snoopopo:20210327111438p:plain

これは、EMISSION無効状態のマテリアルしかプロジェクトに存在しないと、無効状態のシェーダーしかビルドされないため発生する。
予め有効状態のマテリアルをプロジェクト内に配置すればビルド時に有効状態のシャーダも一緒にビルドされることになるので、問題を解決できる!

参考

kan-kikuchi.hatenablog.com