Material(材质)
通过改变材质的属性改变Gameobject的显示
在项目中,经常需要控制改变某些对象的显示状态,如红绿灯的控制,假设现在有个3个红绿灯,有三种状态,红、绿、黄,要控制他们显示不同的颜色
更改材质实现
-
一个材质是一个shader的实例,当改变材质的状态时,如我们在属性面板直接改变材质的颜色或者贴图等,那么会导致使用了此材质的所有对象都同步改变
-
创建三个材质,分别为 红 绿 黄
-
此时根据需求替换对应的材质即可
通过材质属性块实现
个人理解:材质属性块应该是材质中的一个属性实例,也就是说材质对该属性,仅是关联引用,并没有关联具体的值,当改变值时,引用不变,因此可以实现不同的游戏对象,使用一个材质,他们同时对某个属性引用,但是可以通过设置不同的值来实现不同的表现方式
实现代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MaterialTest : MonoBehaviour
{
public Color color;
void Start()
{
var render = GetComponent<Renderer>();
MaterialPropertyBlock block = new MaterialPropertyBlock();
render.GetPropertyBlock(block);
block.SetColor("_BaseColor",color);
render.SetPropertyBlock(block);
}
经验记录
- 某些材质的SurfaceTpye设置为Transparent,导致渲染前后错乱,应改为Opaque
参考
- https://developer.aliyun.com/article/432429