public static void SetMaterialBlendMode(Material material, KamakuraBlendMode mode, bool adjustRenderQueue, string srcBlendKey = DefaultSrcBlendKey, string dstBlendKey = DefaultDstBlendKey) { switch (mode) { case KamakuraBlendMode.Default: case KamakuraBlendMode.Opaque: { material.SetInt(srcBlendKey, (int)UnityEngine.Rendering.BlendMode.One); material.SetInt(dstBlendKey, (int)UnityEngine.Rendering.BlendMode.Zero); if (adjustRenderQueue) { material.SetOverrideTag("RenderType", "Opaque"); material.renderQueue = kSolidQueue; } } break; case KamakuraBlendMode.Additive: { material.SetInt(srcBlendKey, (int)UnityEngine.Rendering.BlendMode.SrcAlpha); material.SetInt(dstBlendKey, (int)UnityEngine.Rendering.BlendMode.One); if (adjustRenderQueue) { material.SetOverrideTag("RenderType", "TransparentCutout"); material.renderQueue = kAlphaTestQueue; } } break; case KamakuraBlendMode.Transparent: { material.SetInt(srcBlendKey, (int)UnityEngine.Rendering.BlendMode.SrcAlpha); material.SetInt(dstBlendKey, (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); if (adjustRenderQueue) { material.SetOverrideTag("RenderType", "TransparentCutout"); material.renderQueue = kAlphaTestQueue; } } break; case KamakuraBlendMode.Multiply: { material.SetInt(srcBlendKey, (int)UnityEngine.Rendering.BlendMode.Zero); material.SetInt(dstBlendKey, (int)UnityEngine.Rendering.BlendMode.SrcColor); if (adjustRenderQueue) { material.SetOverrideTag("RenderType", "TransparentCutout"); material.renderQueue = kAlphaTestQueue; } } break; } }
public MaterialKamakuraBlendModeDrawer(string srcBlendKey, string dstBlendKey, float defaultBlendMode, float enumMask, float adjustRenderQueue) { this.srcBlendKey = srcBlendKey; this.dstBlendKey = dstBlendKey; this.enumMask = (int)enumMask; this.defaultBlendMode = (KamakuraBlendMode)(int)defaultBlendMode; this.enumValues = System.Enum.GetValues(typeof(KamakuraBlendMode)).Cast <int>().Where(t => (this.enumMask & t) != 0).ToArray(); var labels = from num in enumValues select((KamakuraBlendMode)num).ToString(); this.labels = labels.ToArray(); this.adjustRenderQueue = adjustRenderQueue != 0f; }