Unity 用代码设置材质

思路

Unity 中,用代码设置材质,实质上是用代码修改该材质连接的 Shader 内变量的值。编写的 Shader 文件好比一个类,而材质及其连接的 Shader 的当前配置则相当于该类的一个实例。

Shader 基础

Shader 内常见的变量类型:

Shader 中的变量类型 说明
Int 整数
Float 或用 Range(min, max) 表示 浮点
Color 颜色
2D 贴图
Vector4 四维向量

仅列举在 Inspector 面板中常用者。
特别需要注意的是,Shader 内变量名一定以"_"开头

如何用代码设置

用代码设置材质中的某变量时,需要先查看该材质的 Shader 代码,以找到其类型和变量名(不一定是 Inspector 面板上显示的显示名)。

例1:
打开 Shader 代码发现:

_BumpScale("Scale", Float) = 1.0
//_变量名("显示名", 类型) = 初值

所以在 C# 中应该:

Material mat = gameObject.GetComponent<MeshRenderer>().material; // 获取材质
mat.SetFloat("_BumpScale", 0.5); // 设置 Shader 中某 Float 变量的值
//mat.SetFloat("_变量名", 新值);

如上以 Float 为例,找到需要修改的变量 _BumpScale ,并设置新值 0.5
对其他类型,类似地换用 mat.SetInt()mat.SetColor() 等方法即可;
获取值时可以用 mat.GetInt()mat.GetColor() 等方法即可。

例2:
再附一个用代码修改物体颜色的例子。物体就直接创建一个默认的物体,它带有默认材质,Shader 为 Standard。这里就以修改 Inspector 面板上 Albedo 那处的颜色为例。

打开 Standard.Shader 代码发现:

// ...
_Color("Color", Color) = (1,1,1,1)
_MainTex("Albedo", 2D) = "white" {}
//_变量名("显示名", 类型) = 初值
// ...

所以在 C# 中应该:

Material mat = gameObject.GetComponent<MeshRenderer>().material; // 获取材质
mat.SetColor("_Color", new Color(1, 0, 0, 1)); // 设置 Shader 中某 Color 变量的值
// mat.SetTexture("_MainTex", tex); // 当然如果有需要也可设置贴图
//mat.SetFloat("_变量名", 新值);

关于 Shader

本文仅涉及最基础的 Shader 知识,对于 Shader 中涉及的某些具体语法细节也不必过度追究,对 Shader 一无所知也没问题,直接拿来用即可。
想借此系统地入门 Shader?推荐参考以下资料:
《零基础入门Unity Shader(1-10)》taecg 游戏蛮牛

发布了4 篇原创文章 · 获赞 0 · 访问量 157

猜你喜欢

转载自blog.csdn.net/xzqsr2011/article/details/104079797