hyoromoのブログ

iOS/AndroidもしくはCocos2dxネタを書いています

Unity built-in shaderを扱うプラグインをUniversalRP shaderに置き換える

f:id:hyoromo:20200603021250p:plain
非UniversalRPプロジェクトで使っていたり、AssetStoreからDLしてきたプラグインを使う場合の話になります。

例えば外部ファイルをインポートするAssetを使いたくてもUniversalRP対応されていないため、ShaderがDiffuse設定されます。UniversalRPのUpgrade materialコマンドでMaterialのShaderプロパティもUniversalRP向けにある程度置き換えてくれたら良いですが、Diffuse ShaderからSimple Litに置き換わる際にTexture参照が外れた状態となります。
なので、今回はそれに対応する方法を書きます。

環境

  • Unity2019.3.15f1

変換元から変換先のShaderに置き換える

まずはScript中から変換元から変換先のShader名に置き換える必要があります。
変換に関しては公式ドキュメントに記載されているため、こちらを参考に置き換えれば問題ありません。
例えばMobile/DiffuseであればUniversal Render Pipeline/Simple Litに置き換える、とか。

Shaderプロパティの対応

Texture設定箇所を置き換え先のShaderプロパティを変更します。名称は変更は変更元と変更先のpropertiesの名称を見ると分かります。
先ほどと同じようにDiffuseからSimple Litの場合は以下のようになります。

// Diffuseの場合
var material = new Material(Shader.Find("Mobile/Diffuse"));
material.mainTexture = texture;

// Simple Litの場合
var material = new Material(Shader.Find("Universal Render Pipeline/Simple Lit"));
material.SetTexture("_BaseMap", texture);

Textureプロパティ以外にも置き換える必要があれば同じように修正します。