改变材质,改变材质颜色,改变材质透明状态
两个代码,1。材质原代码,放入项目。2.调用方法,挂在物体上
01:::
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MaterialModify : MonoBehaviour
{
public enum RenderingMode
{
Opaque,
Cutout,
Fade,
Transparent,
}
public static 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;
}
}
void Start()
{
//MeshRenderer[] mesh = GetComponentsInChildren<MeshRenderer>();
//foreach (var item in mesh)
//{
// item.material.color = new Color(1, 0, 0, 0.5f);
// SetMaterialRenderingMode(item.material, RenderingMode.Transparent);
//}
}
}
02:::***************************************************************************************************
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CeShi02 : MonoBehaviour
{
private void Awake()
{
foreach (Transform child in GetComponentsInChildren<Transform>(true))
{
if (child.gameObject.GetComponent<Renderer>() != null)
{
if (child.gameObject.GetComponent<Renderer>().material != null)
{
//child.gameObject.GetComponent<Renderer>().material = ss;
for (int i = 0; i < child.gameObject.GetComponent<Renderer>().materials.Length; i++)
{
//物体的材质切换为透明状态
MaterialModify.SetMaterialRenderingMode(child.gameObject.GetComponent<Renderer>().materials[i], MaterialModify.RenderingMode.Fade);
//改变物体的材质颜色
//child.gameObject.GetComponent<Renderer>().materials[i].color = new Color(child.gameObject.GetComponent<Renderer>().materials[i].color.r, child.gameObject.GetComponent<Renderer>().materials[i].color.g, child.gameObject.GetComponent<Renderer>().materials[i].color.b, 0.4f);
child.gameObject.GetComponent<Renderer>().materials[i].color = new Color(0, 1, 1, 0.4f);
}
}
}
}
}
// Update is called once per frame
void Update()
{
}
}