本篇博客介紹改變材質球的 RenderingModel 屬性,及其普通屬性的方法。
改變 RenderModel
using System.Collections; using System.Collections.Generic; using UnityEngine; public class JiaoLongHao : MonoBehaviour { public Material mat; void Update() { // 當按下 O 是,設置制定材質球的 RenderingModel 屬性為 Opaque if (Input.GetKeyDown(KeyCode.O)) { setMaterialRenderingMode(mat, RenderingMode.Opaque); } } private enum RenderingMode { Opaque, Cutout, Fade, Transparent } /// <summary> /// 設置材質球的 RenderingModel 屬性 /// </summary> /// <param name="material">需要改變 RenderingModel 屬性的材質球</param> /// <param name="renderingMode">將材質球的 RenderingModel 屬性設置為該參數類型(該參數為枚舉類型)</param> private void setMaterialRenderingMode(Material material, RenderingMode renderingMode) { switch (renderingMode) { case RenderingMode.Opaque: material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); material.SetInt("_ZWrite", 1); material.DisableKeyword("_ALPHATEST_ON"); material.DisableKeyword("_ALPHABLEND_ON"); material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); material.renderQueue = -1; break; case RenderingMode.Cutout: material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); material.SetInt("_ZWrite", 1); material.EnableKeyword("_ALPHATEST_ON"); material.DisableKeyword("_ALPHABLEND_ON"); material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); material.renderQueue = 2450; break; case RenderingMode.Fade: material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); material.SetInt("_ZWrite", 0); material.DisableKeyword("_ALPHATEST_ON"); material.EnableKeyword("_ALPHABLEND_ON"); material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); material.renderQueue = 3000; break; case RenderingMode.Transparent: material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); material.SetInt("_ZWrite", 0); material.DisableKeyword("_ALPHATEST_ON"); material.DisableKeyword("_ALPHABLEND_ON"); material.EnableKeyword("_ALPHAPREMULTIPLY_ON"); material.renderQueue = 3000; break; } } }
改變材質球的普通屬性
以Smoothness屬性為例:選擇一個材質球 - 點擊材質球右上角的“齒輪” - 選擇“Edit Shader” - 查看帶有Smoothness相關字樣的屬性(名稱 及 類型)
/// <summary>
/// 改變材質球的 Smoothness 屬性
/// </summary>
/// <param name="mat">需要改變屬性的材質球</param>
/// <param name="f">需要改變的數值</param>
private void SetSmoothness(Material mat, float f)
{
// 如圖藍色方框所示,Smoothness 為 float 類型,所以使用 SetFloat 方法,其他類型的屬性以此類推
// 參數一:Shader 中 Smothness 屬性的全稱,參數二:要把該屬性設置的目標值
mat.SetFloat("_SmoothnessTextureChannel", f);
}
/// 改變材質球的 Smoothness 屬性
/// </summary>
/// <param name="mat">需要改變屬性的材質球</param>
/// <param name="f">需要改變的數值</param>
private void SetSmoothness(Material mat, float f)
{
// 如圖藍色方框所示,Smoothness 為 float 類型,所以使用 SetFloat 方法,其他類型的屬性以此類推
// 參數一:Shader 中 Smothness 屬性的全稱,參數二:要把該屬性設置的目標值
mat.SetFloat("_SmoothnessTextureChannel", f);
}