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相关字样的属性(名称 及 类型)
/// 改变材质球的 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);
}
分类:
Unity3D
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?