本日はMRGT枠です。
現在MRGTのプロジェクトへ機能開発を行いプルリクエストを提出しています。
ここでは修正のリクエストが来ており、以下のようにAssignNewShaderToMaterialを編集してStanardShaderなどの発光マップがシェーダー変更時にMRGTStandardShaderの_EmittiveMapに引き継がれるように依頼が来ていました。
Could you also copy the emission map property from the standard shader in the AssignNewShaderToMaterial function below?
This way users will keep their settings when switching shaders.
今回はこの修正に取り掛かります。
〇AssignNewShaderToMaterial
AssignNewShaderToMaterialはShaderGUIクラスで提供されるShaderに関する関数です。
これはマテリアルに割り当てられたShaderを別のシェーダーに変更した際に発火されます。
つまりUnityStandardShaderなど従来のシェーダーからMRGTStandardShaderに変更した際などに処理が働き、一部の共通プロパティを引き継ぐ仕組みです。
〇_EmittiveMapの追加
今回のPRではMRGTStandardShaderに発光マップ(_EmissiveMap)を追加しました。
これはMRGTStandardShaderの特殊なプロパティではなくUnityのStandardShaderなどにも共通して提供されているプロパティです。
そのためこの発光マップをShader変更時に保持されるようにしていきます。
①AssignNewShaderToMaterial関数にemissionMapTextureを追加します。
public override void AssignNewShaderToMaterial(Material material, Shader oldShader, Shader newShader) { ・・・ float? emission = null; Color? emissionColor = GetColorProperty(material, "_EmissionColor"); Texture emissionMapTexture = material.HasProperty("_EmissionMap") ? material.GetTexture("_EmissionMap") : null; //追加 ・・・
②次にemissionMapTextureが存在する場合新たなマテリアルのプロパティとしてセットする処理を加えます。
if (emissionMapTexture) { material.SetTexture("_EmissiveMap", emissionMapTexture); }
以上でプロパティを保持してシェーダーの変更が可能になりました。
PRの修正点はあと一か所なので今週中に仕上げていきたいです。