74 lines
1.6 KiB
C#
74 lines
1.6 KiB
C#
using System.Linq;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace AllIn13DShader
|
|
{
|
|
public static class MaterialUtils
|
|
{
|
|
public const string STR_OUTLINE_TYPE_NONE = "_OUTLINETYPE_NONE";
|
|
public const string STR_CAST_SHADOWS_ON = "_CAST_SHADOWS_ON";
|
|
public const string STR_RECEIVE_SHADOWS_ON = "_RECEIVE_SHADOWS_ON";
|
|
|
|
public static bool CheckMaterialShader(Material targetMat)
|
|
{
|
|
bool isOutline = !targetMat.shaderKeywords.Contains(STR_OUTLINE_TYPE_NONE);
|
|
bool shadowCasterPassEnabled = targetMat.shaderKeywords.Contains(STR_CAST_SHADOWS_ON) || targetMat.shaderKeywords.Contains(STR_RECEIVE_SHADOWS_ON);
|
|
|
|
#if ALLIN13DSHADER_BIRP
|
|
shadowCasterPassEnabled = true;
|
|
#endif
|
|
|
|
|
|
bool shaderChanged = false;
|
|
|
|
Shader oldShader = null;
|
|
Shader newShader = null;
|
|
Shader shaderToCompare = null;
|
|
|
|
if (isOutline)
|
|
{
|
|
|
|
if (shadowCasterPassEnabled)
|
|
{
|
|
shaderToCompare = GlobalConfiguration.instance.shOutline;
|
|
}
|
|
else
|
|
{
|
|
shaderToCompare = GlobalConfiguration.instance.shOutlineNoShadowCaster;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (shadowCasterPassEnabled)
|
|
{
|
|
shaderToCompare = GlobalConfiguration.instance.shStandard;
|
|
}
|
|
else
|
|
{
|
|
shaderToCompare = GlobalConfiguration.instance.shStandardNoShadowCaster;
|
|
}
|
|
}
|
|
|
|
if (targetMat.shader != shaderToCompare)
|
|
{
|
|
oldShader = targetMat.shader;
|
|
newShader = shaderToCompare;
|
|
|
|
shaderChanged = true;
|
|
}
|
|
|
|
if (shaderChanged)
|
|
{
|
|
targetMat.shader = newShader;
|
|
|
|
if (AssetDatabase.IsMainAsset(targetMat))
|
|
{
|
|
EditorUtility.SetDirty(targetMat);
|
|
}
|
|
}
|
|
|
|
return shaderChanged;
|
|
}
|
|
}
|
|
} |