在Unity5.x 中,金属度是相对而言是最关键的一个可调整参数。 我们在Unity 中模拟现实生活中的东西,很多时候都需要控制它们的金属度。 金属度测试案例:循环生成多排3D 球体,通过C#代码修改球体身上Shader 的金属度相关参数。 四种情况: 第一排:金属度01,平滑度0; 第二排:金属度01,平滑度1; 第三排:金属度0,平滑度01; 第四排:金属度1,平滑度01。 代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Metallic : MonoBehaviour {

public GameObject prefab;

void Start () {

    //金属度0~1,平滑度0;
    for(int i = 0; i <= 10; i++)
    {
        Vector3 pos = new Vector3(i, 0, 0);
        GameObject go = GameObject.Instantiate(prefab, pos, Quaternion.identity);
        go.GetComponent<MeshRenderer>().material.SetFloat("\_Metallic", i \* 0.1f);
        go.GetComponent<MeshRenderer>().material.SetFloat("\_Glossiness", 0);
    }

    //金属度0~1,平滑度1;
    for (int i = 0; i <= 10; i++)
    {
        Vector3 pos = new Vector3(i, 0, -1);
        GameObject go = GameObject.Instantiate(prefab, pos, Quaternion.identity);
        go.GetComponent<MeshRenderer>().material.SetFloat("\_Metallic", i \* 0.1f);
        go.GetComponent<MeshRenderer>().material.SetFloat("\_Glossiness", 1);
    }

    //金属度0,平滑度0~1;
    for (int i = 0; i <= 10; i++)
    {
        Vector3 pos = new Vector3(i, 0, -2);
        GameObject go = GameObject.Instantiate(prefab, pos, Quaternion.identity);
        go.GetComponent<MeshRenderer>().material.SetFloat("\_Metallic", 0);
        go.GetComponent<MeshRenderer>().material.SetFloat("\_Glossiness", i \* 0.1f);
    }

    //金属度1,平滑度0~1
    for (int i = 0; i <= 10; i++)
    {
        Vector3 pos = new Vector3(i, 0, -3);
        GameObject go = GameObject.Instantiate(prefab, pos, Quaternion.identity);
        go.GetComponent<MeshRenderer>().material.SetFloat("\_Metallic", 1);
        go.GetComponent<MeshRenderer>().material.SetFloat("\_Glossiness", i \* 0.1f);
    }
}

}

代码中Shader参数的值可以对照Unity官方的着色器压缩包里的代码来书写: [

](http://www.wjgbaby.com/wp-content/uploads/2018/03/18032903-300x178.png)](http://www.wjgbaby.com/wp-content/uploads/2018/03/18032903.png) 项目运行效果,未开启光线渲染: [![](http://www.wjgbaby.com/wp-content/uploads/2018/03/18032902-300x125.png)
](http://www.wjgbaby.com/wp-content/uploads/2018/03/18032903-300x178.png)](http://www.wjgbaby.com/wp-content/uploads/2018/03/18032903.png) 项目运行效果,未开启光线渲染: [![](http://www.wjgbaby.com/wp-content/uploads/2018/03/18032902-300x125.png)
案例分析: 金属度不高的,但是平滑度高(如第三排):瓷器,塑料,玻璃等 金属度高,但是平滑度低(如第一排):磨砂金属,金属等 金属度总结: 1.两个参数 Metallic 有两个参数,贴图和滑块条,滑块条控制的参数是01。 金属度贴图是一张黑白图,就是用这些黑到白的颜色,存储01 相关的信息值。 滑块条是调整的整体,调整的时候,整个模型都是统一的一种效果; 贴图则可以分区域控制金属度的高与低,使得模型金属效果更有层次。