Unity3D_改變材質球屬性


本篇博客介紹改變材質球的 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);
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM