首页 > 其他分享 >获取材质时生成副本问题

获取材质时生成副本问题

时间:2023-01-19 00:11:26浏览次数:49  
标签:副本 mat material 获取 renderer var 材质

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

相关文章