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);
    }
复制代码

 

posted on   考拉宝贝  阅读(4150)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示