Renderer上的材质获取时会new一个副本,比如胶囊体(Capsule)的Renderer
我们不改变Material的属性,仅仅get下就会new一个副本出来
var mat = GetComponent<Renderer>().material;
ugui上的材质获取时不会new副本,而是直接返回共享材质
修改材质属性的影响
用到的脚本
using UnityEngine; using UnityEngine.UI; public class ModifyMatColor : MonoBehaviour { public Color m_c = Color.white; void Start() { ChangeRendererColor(); ChangeGraphicColor(); } private void ChangeRendererColor() { var renderer = GetComponent<Renderer>(); if (null == renderer) return; var mat = renderer.material; mat.color = m_c; } private void ChangeGraphicColor() { var g = GetComponent<Graphic>(); if (null == g) return; var mat = g.material; mat.color = m_c; } }
1) Image_Red使用该脚本将material的颜色改为红色,Image_Yellow改为黄色,最终是2个Image都变成了黄色。
所以,修改ugui上的material是影响所有使用默认材质的物体
2) Capsule_Green使用该脚本将material的颜色改为绿色,Capsule_Blue改为蓝色,最终它们分别变成了绿色和蓝色。
所以,修改Renderer上的material的属性只影响单个物体
参考
MaterialPropertyBlock_阿赵3D的博客-CSDN博客_materiapropertyblock, Profile中查看产生副本问题
标签:副本,mat,material,获取,renderer,var,材质 From: https://www.cnblogs.com/sailJs/p/17060031.html